没有正确的解决方案
其他提示
尽可能地模拟代码以避免完全访问数据库,但在我看来,你需要在线上的某个地方测试你的SQL。如果您确实编写了打到数据库的测试,那么避免令人头疼的一个关键提示是确保您的设置将数据转换为已知状态,而不是依赖已经存在合适数据的那些数据。
当然,永远不要对你的实时数据库进行测试!但不言而喻:)
如上所述,使用模拟来模拟单元测试中的DB调用,除非您想无休止地调整测试和数据。测试sql语句意味着更多的集成测试。与单元测试分开运行,它们是2种不同的野兽。
最好自动擦除测试数据库,然后使用测试工具数据填充它,这些数据将被假定为需要连接到数据库的所有测试。需要在每次测试之前重置数据库以进行适当的隔离 - 如果您必须按特定顺序运行测试以获得一致的结果,那么输入错误数据的失败测试可能会导致测试失败并导致错误。
您可以使用工具清除和填充数据库( DBUnit , DBUnit.NET ,其他)或者只是让自己的实用程序类做同样的事情。
正如您所说,其他层应该与实际命中数据库的类充分分离,因此测试中涉及的任何类型数据库的需求仅限于运行代码库的一小部分的测试。您的数据库访问组件可以被模拟/存根以获取依赖于它们的所有内容。
我做的一件事是创建静态方法,返回已知状态的测试数据。然后我会用一个“假的” DAL返回此数据,就像我实际上正在调用数据库一样。至于测试sql /存储过程,我使用SQL Management Studio对其进行了测试。 YMMV!
不隶属于 StackOverflow