Skip to main content

Posts

Showing posts from July, 2014

Running unit tests using MSTest from console application

There are times when you end up with a requirement like this:
You should be able to run Unit Tests from console application. And yes, we are talking about MSTests. Well, this is not very complicated using MSTest.exe
Mstest /testcontainer:[pathToOurTestComponent.dll] After a few day you end up with a new requirement:
Run Unit Tests using a console application from a machine that doesn’t  have Visual Studio installed Using different scripts from internet (like this one: http://mindinthewater.blogspot.ro/2011/02/executing-visual-studio-2010-unit-tests.html), you end up with a configuration that can be used to run unit tests on machines that doesn’t have Visual Studio.
Mission complete? Yes.
But, you have a problem. Yes, there is a but. What about licensing? Are you allowed to do something like this?
Depends of the person who run your console application. You are allowed to do something like this as long the person who run the console application has a Visual Studio license. This is neede…

Entity Framework: How to get in a generic way entities from EF based on entity IDs

Offtopic:
I’m back. After a few weeks when I was blocked with personal projects, I’m back on the field, ready to write technical content.
Today I’ll start with something lights that can make our day more beautiful.

How we can write a generic method to get an entity from database using Entity Framework?
Let’s assume that we have different types of entities and we would like to obtain a specific entity using a generic method. Each entity can have the primary key field called in different ways. Also the type of the field can be different (one can be string, another one int and so on).
For this cases we should use Find method. This method accept as input parameters a collections of objects that represents the keys of the entity. Using this method we can get entities from EF in a generic way.
For compound keys, you need to specify the keys in the same order you specified them when you mapped the entity in EF.
Why a list of keys and not only one input parameter?
Well, we can have entities tha…

IIS + Skype = Unable to bind to the underlying transport for [::]:80

The same error hit one of my colleges one year ago and two years ago and so on.
The error is from IIS and sounds like this:
Unable to bind to the underlying transport for [::]:80. The IP Listen-Only list may contain a reference to an interface which may not exist on this machine. The data field contains the error number. From command line we can use “NETSTAT –ano” to see what process is blocking our port.
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 2288 Once we identify the PID (2288) of the process that use our port we can take a look in the Task Manager and identify the process that is using 80 port. And YES, the process that is using port 80 is SKYPE.
I don’t understand why Skype needs to use port 80. Hate it!

Entity Framework (EF) TransactionScope vs Database.BeginTransaction

In today blog post we will talk a little about a new feature that is available on EF6+ related to Transactions.
Until now, when we had to use transaction we used ‘TransactionScope’. It works great and I would say that is something that is now in our blood.
using (var scope = new TransactionScope(TransactionScopeOption.Required)) { using (SqlConnection conn = new SqlConnection("...")) { conn.Open(); SqlCommand sqlCommand = new SqlCommand(); sqlCommand.Connection = conn; sqlCommand.CommandText = ... sqlCommand.ExecuteNonQuery(); ... } scope.Complete(); } Starting with EF6.0 we have a new way to work with transactions. The new approach is based on Database.BeginTransaction(), Database.Rollback(), Database.Commit(). Yes, no more TransactionScope.
In the followi…

Custom configuration file of the unit tests project on the build (or continuous integration) machine

There are a lot of ways to change the configuration file in a project based on the build type. In my case I need a custom configuration file for CI.
My approach was a little different than the classic one. In general we have debug and release build. We named the configuration file app.debug.config and app.release.config. In this case we need a 3rd file called app.ci.config. How we can use this file on our build.
The most simple solution is to write a PowerShell or bat script that delete the app.config and rename app.ci.config to app.config. This script can be added as a CI step on your server.
Simple like this you can have a custom CI configuration of your unit tests without having to use different tools or create complicated msbuild steps.
del /f IntegrationTests\app.config rename \app.ci.config app.config

ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded

Today blog post will be started with the following error when running DB tests on the CI machine:
threw exception: System.InvalidOperationException: The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' registered in the application config file for the ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded. Make sure that the assembly-qualified name is used and that the assembly is available to the running application. See http://go.microsoft.com/fwlink/?LinkId=260882 for more information. at System.Data.Entity.Infrastructure.DependencyResolution.ProviderServicesFactory.GetInstance(String providerTypeName, String providerInvariantName) This error happened only on the Continuous Integration machine. On the devs machines, everything has fine. The classic problem – on my machine it’s working. The CI has the following configuration:

TeamCity.NET 4.51EF 6.0.2VS2013
It seems that there …