2012-12-07 68 views
5

如何使用NUnit和测试数据库来验证我的代码?我会理论上使用mocks(moq),但是我的代码更多的是维护形式并修复了它的模式,我没有设置所有的mock。使用单元测试和测试数据库

我只是创建一个测试项目,然后写测试,实际连接到我的测试数据库,并执行代码,因为我将在应用程序中?然后,我用断言检查代码,并确定我要求的是我正确返回的内容?

+0

这听起来像你实际上意味着集成测试。单元测试是孤立的,提供依赖关系的模拟/假实现来测试他们不会有任何数据库代码的方法。 –

回答

6

我该如何使用NUnit和测试数据库来验证我的代码?我会 理论上使用嘲笑(MOQ),但我的代码更多的维护形式和 修复它的模式,我没有设置所有的嘲笑。

如果您想测试某个类的确切实现行为,那么仅使用mock是有用的。这意味着你从字面上断言一个类调用另一个类的特定方法。例如:我想断言Ninja.Attack()调用Sword.Unsheath()。

难道我只是创建一个测试项目,然后写测试,实际上 连接到我的测试数据库和执行代码,因为我wwould在 应用程序?然后我用断言检查代码,并确定我要求的 是我正确回复的内容?

这只是一个普通的旧单元测试。如果实现这一目标没有障碍,那么这是一个很好的指标,这将成为您最有效的测试方法。这是实用和高效的。

还有一个你没有提到的测试工具,叫做存根(stub)。我强烈建议你阅读这篇更多信息经典文章:

http://martinfowler.com/articles/mocksArentStubs.html

+0

谢谢,测试数据库它是我的话。所以只需用我的代码调用数据库并测试它的正确性。 – cdub

+0

这可能看起来太美好,但它是真实的,但它的工作原理。特别是考虑到您的应用程序已经写好。 –

2

因为我们不是在谈论理论上的情况下,这是我会做什么 - 从我的理解,你要测试的是,无论你的应用程序正确连接到数据库并获取所需的数据或不。

  1. 创建一个测试数据库具有相同的架构
  2. 添加一些虚拟数据在
  3. 开放从代码到数据库的连接,请求所需的数据
  4. 写断言来测试你得到了什么针对您的预期

另外,我不认为DB这些测试应该被称为单元测试,因为它们不是自包含的,并且依赖于其他因素,如你的数据库是否正常运行与否。我会说他们接近于集成测试,它将测试应用程序的不同组件是否按照预期一起使用。

(丹的回答^^几乎总结了我想说的话)

+1

是写作寿的+1 – cdub