Unit Testing / Mocking Techniques

Introduction to Unit Testing Unit Testing The primary goal of unit testing is to take the smallest piece of testable software in the application, isolate it from the remainder of the code, and determine whether it behaves exactly as you expect under various conditions. Benefits Unit testing has proven its value in that a large percentage of defects are identified during its use. If you detect and solve bugs closer to the time they are introduced, it’s a lot faster than having to locate, debug, and resolve a bug in the future. You know that your code works as you expect it to work. With unit tests in place, you know that your foundation code is dependable. It’s a good way to test first hand how your API is going to be used. Unit Testing verses Integration Testing The difference between unit testing and integration testing is important to recognize. What is a unit test? A unit test is code that tests one single method or function and checks … [Read more...]

How to automate trimming strings in Entity Framework

When working with legacy data where the data being loaded into SQL server tables contains trailing spaces, the trailing spaces will remain in the fields regardless of whether the fields are varchar  This poses problems when doing compares or extracting data to files as you may not get the results you are looking for. One solution would be to add a trim to each field where this occurs.  This will result in having trims scattered all over your code base. Another and better solution would be to add an interception for Entity Framework that will trim all fields of certain data types. String Interceptor class As you can see, this will trim fields of types nvarchar, varchar, char, and nchar.  In the SQL generated, it will add a LTRIM and RTRIM to each field. To implement this interceptor, you just need to register it in a separate class within the same assembly. I found this solution based on Rowan Miller's EF6.1–Workaround Trailing Blanks Issue In String Joins … [Read more...]

Application Configuration Settings

One of the most common ways to store application setting is in the config file.  Below I will show examples of how to store configurations and their retrieval. AppSettings and ConnectionString Sections Include the appSettings and/or connectionStrings sections in  .config file for retrieval from your application. <?xml version="1.0" encoding="utf-8"?> <configuration> <appSettings> <add key="MySampleKey" value="Sample value" /> </appSettings> <connectionStrings> <add name="DataSource" connectionString="Server=MyDevServer;Database=Northwind; Integrated Security=true;" providerName="System.Data.SqlClient"/> </connectionStrings> </configuration> C# code for getting the values var appsettingValue = ConfigurationManager.AppSettings.Get("MySampleKey"); var connectionStringValue = ConfigurationManager.ConnectionStrings["DataSource"] … [Read more...]

Global Data

Global data is accessible anywhere in a program.   Using global data is riskier than using local data. Here are some common problems with using Global Data: Problems with Global Data Unexpected changes to global data.  Since global data can be accessed anywhere, it can also be changed anywhere without the intent of doing so. Cannot concentrate on only one routine.  You have to concentrate on one routine and every other routine that uses the same global data. It's difficult to modularize your application. Usage of Global Data There are some situations when using global data is ok.  For example, configuration data is often used for an application using variables that you may want to change without recompiling and redeploying your code.  You can store application or user settings in a config file, database or windows registry. General Guidelines Create global variables only when you need to.  Always start with creating local variables first and expand scope as necessary. … [Read more...]