单元测试依赖于数据库的Window服务

时间:2009-11-16 22:01:32

标签: database unit-testing nunit wcf

我们在.NET 3.5 \ C#和WCF中有一组服务。 NUnit测试需要运行服务并侦听请求。 这些服务需要更新的SQL数据库才能进行连接。

目前,单元测试的[SetUp]部分执行两项任务:

  • 执行最新的SQL脚本以构建数据库。
  • 利用a System.Diagnostics.Process.Start运行服务的命令行模式。

它通常有效,但服务对某些架构更改很敏感,有时会失败。我正在寻找设置数据库和服务的最佳实践,并确保服务最终都停止。

该过程由MSBuild运行。

3 个答案:

答案 0 :(得分:5)

如果您正在启动服务,并且正在执行实际执行服务......那么您不仅仅需要进行单元测试。您现在正在进行集成测试。

您应该考虑将数据访问抽象为接口。然后,您可以编写该接口的具体实现以进行正常操作,并使用依赖注入为单元测试注入模拟实现。

答案 1 :(得分:1)

单元测试的最佳实践是使用模拟数据库行为而不是真实数据库的模拟对象。

答案 2 :(得分:1)

您对依赖注入(DI)做了多少工作?

我强烈推荐阅读Jerry Millers blog,他在使用.Net的单元测试和DI方面有很多很棒的东西。

这是一篇关于The Dependency Injection Pattern开始的帖子 阅读完毕后,请查看Unit Testing Business Logic上的帖子。

使用MSBuild是一个良好的开端,所以现在需要重新考虑外部服务,然后在测试期间模拟它们。你想要嘲笑的复杂程度取决于你。

这是一个让你入门的SO post on Mocking Frameworks

我建议将测试分成两个独立的部分:

  • 单元测试(您将使用DI来模拟外部服务)
  • 集成测试(您目前正在做的事情)

在测试结束时,您可以使用[TestFixtureTearDown]属性的方法停止服务。