我创建了一些单元测试(大约50个),用于测试数据库项目中的存储过程。当我使用"运行所有测试"一些测试失败了。所以,我单独运行它们都会通过。所以我可以看到执行的顺序以某种方式在一些导致问题的表中插入狡猾的数据。
所以我想知道是否有一种方法来记录或输出(在测试窗口中)运行的单元测试的顺序是什么。由于它们运行得很快并且每次运行时订单都会改变,所以我无法确定何时运行。 “测试输出”窗口仅在测试开始和完成时保持。
------发现测试开始------
==========发现测试结束:52找到(0:00:00.4010401)==========
------运行测试开始------
==========运行测试完成:1次运行(0:00:13.4663465)==========
我希望看到类似的内容,
------发现测试开始------
==========发现测试结束:52找到(0:00:00.4010401)==========
------运行测试开始------
------ TestA开始------
------ TestB开始------
==========运行测试完成:1次运行(0:00:13.4663465)==========
这甚至可能吗?
答案 0 :(得分:0)
首先,单元测试不应超过某个范围(单位,通常是一个类)。换句话说,您不应该触摸数据库或读取文件 - 这已经是集成测试。
其次,单元测试应该能够彼此独立运行,而不是依赖于任何外部状态 - 只需单独测试该代码单元。
话虽这么说,在编写改变或要求某个状态的测试时,确保为每个测试进行适当的设置非常重要,这样一个人就不需要另一个测试了。之前运行。这可以像配置[SetUp]
方法以插入一些种子数据一样简单,然后再将其移除TearDown
。如果不同的测试需要不同的种子数据,您必须在实际测试中这样做。
最后,您应该能够通过在命令行中运行它们来掌握测试执行顺序(使用nunit-console.exe
)
答案 1 :(得分:0)
一种选择是使用tSQLt,这是一个开源单元测试框架,它使用事务在每次测试后回滚更改。这意味着您总是会回到已知的良好状态进行下一次测试。
您可以使用Ed Elliott's tSQLt adaptor将tSQLt与VS单元测试集成。