我怎样才能得到Resharper中止测试的理由?

时间:2015-10-14 11:27:51

标签: c# unit-testing nunit resharper

我正在使用Resharper 9.2和NUnit 2.6.4以及~120单元测试。有时当我开始运行测试时,resharper会在随机测试时停止并将其状态设置为Aborted并跳过其他测试。这非常不方便,因为我手动运行了其余的测试。 有没有什么方法可以获得堕胎的原因,一些resharper测试运行日志或NUnit中的某些东西来帮助解决我的问题?

我也尝试使用原生NUnit运行器,但它有时会抛出不包含任何有用信息的异常(某些远程处理异常,它没有任何用处)

我试图设置“并行运行1个程序集”和“为每个程序集使用单独的AppDomain进行测试”,但它没有帮助。

UPD

我在调试模式下重现了这一点,调试单元测试刚关闭,在输出窗口中我发现:

The program '[4572] JetBrains.ReSharper.TaskRunner.CLR4.exe: Program Trace' has exited with code 0 (0x0).
The program '[4572] JetBrains.ReSharper.TaskRunner.CLR4.exe: Managed (v4.0.30319)' has exited with code -1073741819 (0xc0000005) 'Access violation'.

似乎问题是外部库的不安全代码。

3 个答案:

答案 0 :(得分:3)

我还遇到了Resharper决定不断中止测试的案例。它并没有打电话给无人管理或任何怪异的东西。

答案是它有一个无意的递归调用导致stackoverflow异常。当我决定“调试”而不是“运行”它们时,这很明显。

所以我假设一般的说法是“中止”测试是出现问题的症状,但错误并没有导致从代码本身抛出异常,而是从CLR或其他东西抛出。

答案 1 :(得分:2)

我只有一个测试,除了设置整数值外,基本上没有运行任何代码。我只是添加了我的第一批测试以设置单元测试,所以我迅速添加了setup()和create()测试。

每次运行时,我都会得到测试中止的错误。 tests aborted

调试失败

调试断点甚至不会在[Setup] TestSetup()方法内部停止。

我同时删除了TestSetup()和[Test] void Create()方法,该方法可以运行,但结果当然没有定论。

我重新添加了[SetUp] TestSetup()方法,它也没有中止。我再次添加了[Test] void Create()方法,它再次开始中止而无法中断。

最后,我看到了问题。看到问题了吗?

[SetUp]    
public void TestSetup()
{
    string test = "this thing";
}

[Test]
void Create()
{
    int x = 5;
    string s1 = "super";
}

扰流器

糟糕,我忘记将Create()方法设置为public。

答案 2 :(得分:1)

似乎resharper在这种情况下无关。我有访问冲突错误,在这种情况下,测试人员进程将被关闭。 .net无法处理此错误,因为它不在托管级别。唯一的办法是检查输出窗口是否有错误信息:“程序'[4572] JetBrains.ReSharper.TaskRunner.CLR4.exe:托管(v4.0.30319)'已退出,代码为-1073741819(0xc0000005)'访问当你的测试无缘无故地中止时“违规”。 如果您可以访问本机代码,则可以进行调试。

在我的情况下,问题是不正确使用COM对象和Dispose()方法。我已经修好了,现在一切都还好 - 没有“沉默”堕胎。