测试长时间运行的进程

时间:2012-08-02 12:16:56

标签: c# unit-testing

我需要测试一段耗时的操作。该操作会更改数据库。目前,我的大部分测试都非常相似,在数据库上执行查询以确定操作后的预期结果。然后,运行测试中的操作。最后,再次查询数据库以确定是否已满足预期条件。由于我只是在每个测试中查询数据库以确定预期和实际结果,并且被测功能总是在数据库上执行相同的操作。有没有办法让我可以运行一次操作并仍然在自己的测试中测试每个条件?

2 个答案:

答案 0 :(得分:2)

对具有副作用(如连接到数据库)的代码运行单元测试的标准策略是提供模拟对象而不是真正的数据库连接或其他服务,但它取决于代码的结构,这可能更难或者更容易采用。

控制和依赖注入反转的框架对于这种目的非常有用。依赖注入模式确保对象可以在运行时传递给它们的依赖实现,而不是直接构造它们,用于测试目的或仅创建更多模块化代码。 StructureMap是C#的一个框架,但还有其他的,比如Spring.NET。

答案 1 :(得分:1)

听起来您希望使用单元测试框架和/或模拟框架。

作为一般规则,您不应该编写其他查询来测试查询是否在数据库上按预期工作,因为这些查询本身需要开发和测试。

根据您要写入的数据库,您可能能够获得数据库中受影响的行数(请查看SQL Server的@@ rowcount)。但是,你再次添加额外的代码只是为了进行测试,这应该是一个单独的活动。