我有一个需要编写测试的大程序。我想知道编写以特定顺序运行的测试是否是错误的,因为某些测试必须按顺序运行,并且依赖于以前的测试。单元测试的顺序是否令人沮丧?
例如像下面这样的场景:
- CreateEmployer
- 在CreateEmployee(要求雇主)
- 添加部门
我看到的缺点这种方法如果一次测试失败,所有的后续测试也将失败。但是,我将不得不编写代码来构建数据库,所以使用构建模拟数据库的代码作为一种类似集成的单元测试可能是更有效的方法。
我应该创建数据库而不使用测试作为种子方法,然后再次运行每个方法以查看结果吗?我用这种方法看到的问题是,如果种子方法不起作用,则所有测试都将失败,并且不会立即明确错误在种子方法中,而不是服务或测试本身。
有道理。我想我所描述的将是更多的集成测试。假设单元测试不测试与数据库的交互并且仅测试逻辑,我可以想到几个我真正需要测试的地方。测试什么本质上是setter函数'this.Department = foo'似乎很浪费。我会说大约2%的代码具有不平凡的逻辑。 – 2014-10-07 18:19:30
@RaySülzer:那么,你不会直接*测试简单的制定者。您将测试业务操作,并且在这些操作中执行的逻辑将调用setter。 (如果他们*不*调用setter,那么您的业务操作*都不使用*这些setter,并且setter应该完全从代码中移除。)对于集成测试,您希望完全从测试中移除逻辑并只测试集成点本身(通常是DAL操作)。这里有一些选择,取决于什么适用于你的团队。但时间耦合仍应该被删除。 – David 2014-10-07 18:22:00
谢谢!我的大多数服务调用都是简单的setter,而不是调用_orm.Update(object)。只有我的一些功能确实需要需要联合测试的业务逻辑。这是一个非常基本的程序。 – 2014-10-07 18:23:26