English 中文(简体)
Unit testing database-dependent Window services
原标题:

We have a set of services in .NET 3.5C# and WCF. The NUnit tests need the services to be running and listening for requests. The services need an updated SQL database to be ready for connection.

Currently the [SetUp] section of the unit test does two tasks:

  • Execute the latest SQL scripts to build the database.
  • Utilize a System.Diagnostics.Process.Start to run the commandline mode of the services.

It usually works but the services are sensitive for certain schema changes, which sometimes fails them. I m looking for the best practice for setup the database and then the services, and also making sure the services are down at the end.

The process is run by MSBuild.

最佳回答

If you re starting the services, and hitting actual executing services...changes are you re not just Unit testing anymore. You re now integration testing.

You should really think about abstracting your Data Access into an Interface. You can then code a concrete implementation of that Interface for normal operation and use Dependency Injection to inject a mock implementation for your Unit tests.

问题回答

The best practice for unit testing is using mock objects which emulate database behavior instead of the real database.

Have you done much with Dependency Injection (DI)?

I highly recommend reading Jerry Millers blog, he s got lots of great stuff on Unit Testing and DI using .Net.

Here s a post to get your started on The Dependency Injection Pattern.
Once you ve read this, have a look at his post on Unit Testing Business Logic.

Using MSBuild is a good start, so now its a case of re factoring out the external services and then mocking them during your test. How complicated you want the mocking to be is up to you.

Here s a SO post on Mocking Frameworks to get you started.

I d suggest breaking your testing into two separate parts:

  • Unit Testing (where you would use DI to mock out the external services)
  • Integration testing (what you are currently doing)

At the end of the tests you could stop your services using a method with the [TestFixtureTearDown] attribute.





相关问题
what is wrong with this mysql code

$db_user="root"; $db_host="localhost"; $db_password="root"; $db_name = "fayer"; $conn = mysqli_connect($db_host,$db_user,$db_password,$db_name) or die ("couldn t connect to server"); // perform query ...

Users asking for denormalized database

I am in the early stages of developing a database-driven system and the largest part of the system revolves around an inheritance type of relationship. There is a parent entity with about 10 columns ...

Easiest way to deal with sample data in Java web apps?

I m writing a Java web app in my free time to learn more about development. I m using the Stripes framework and eventually intend to use hibernate and MySQL For the moment, whilst creating the pages ...

join across databases with nhibernate

I am trying to join two tables that reside in two different databases. Every time, I try to join I get the following error: An association from the table xxx refers to an unmapped class. If the ...

How can I know if such value exists in database? (ADO.NET)

For example, I have a table, and there is a column named Tags . I want to know if value programming exists in this column. How can I do this in ADO.NET? I did this: OleDbCommand cmd = new ...

Convert date to string upon saving a doctrine record

I m trying to migrate one of my PHP projects to Doctrine. I ve never used it before so there are a few things I don t understand. In my current code, I have a class similar to this: class ...

热门标签