我使用NUnit和TeamCity来运行我的测试。
某些测试(并非所有测试)都在测试类构造函数中进行了操作。我将这些行为称为“预先行动”以进行验证。因此,在一个测试类中,我有例如5个验证(测试)和一组预操作。
我注意到如果一套测试如果在执行前的行动阶段失败那么 TeamCity根本不会在其报告中显示这些测试(不是任何地位)。
在构建日志中,我看到如下错误:
SetUp Error : {test_name} + error code.
我对TeamCity的期望是至少将这些测试报告为已忽略。
要比较使用TeamCity运行测试和在Visual Studio中使用Visual Studio运行测试,相同失败条件的结果将是所有测试套件都失败。所有测试的失败错误都是相同的。
所以我想要的只是知道我的某些测试是否完全没有运行,因为如果TeamCity在测试结果中没有包含那么我甚至不知道问题!< / p>
配置: TeamCity 10.0,NUnit 3.0。 命令行参数: 更新:在日志中执行的测试结果如下: 所以NUnit标志着这样的测试甚至没有失败,而是标记为“错误”。我仍然希望他们在测试结果中。 --result=TestResult.xml --workers=4 --teamcity
[13:03:48][Step 1/1] Test Run Summary
[13:03:48][Step 1/1] Overall result: Failed
[13:03:48][Step 1/1] Tests run: 82, Passed: 0, Errors: 82, Failures: 0, Inconclusive: 0
[13:03:48][Step 1/1] Not run: 0, Invalid: 0, Ignored: 0, Explicit: 0, Skipped: 0
[13:03:48][Step 1/1] Start time: 2016-09-08 09:56:33Z
[13:03:48][Step 1/1] End time: 2016-09-08 10:03:48Z
[13:03:48][Step 1/1] Duration: 434,948 seconds
答案 0 :(得分:1)
您的测试是错误的,因为您在构造函数中抛出异常。由于无法构建测试夹具,因此就NUnit而言,测试并未真正运行。它是导致异常的NUnit断言失败的事实在构造对象的上下文中是无关紧要的。
我们一直建议人们保持构造函数非常简单,因为NUnit不保证构造对象的时间和频率。在构造函数中使用断言是对该委托人的极端违反,事实上,我以前从未见过有人这样做过。
如果您希望每次测试运行而不是构建时发生某些事情,那么OneTimeSetUp属性就在那里。 NUnit确实保证何时执行该方法。 : - )
这些都没有告诉我为什么TC没有识别出错误,但是我猜测它是因为一旦构造函数失败,测试就永远不会运行。 NUnit本身通过将测试报告为错误来补偿这一点,但TC不一定会这样做。