这让我抓狂!我正在使用NUnit版本3.6.0,我的测试结果出乎意料。我已经创建了一个非常简单的测试来演示我遇到的问题:
[TestFixture]
public class NunitTest
{
[Test]
public void TestIt()
{
string x = "x";
string y = "y";
// this fails (expected) but with NullReferenceException (unexpected)
Assert.That(x, Is.EqualTo(y));
}
}
当测试运行时,我得到一个NullReferenceException,当我期待类似“期望是'X',实际是'Y'”
我进一步推断了断言,他们都通过了
[TestFixture]
public class NunitTest
{
[Test]
public void TestIt()
{
string x = "x";
string y = "y";
// this passes
bool atest = x.Equals(y);
Assert.IsFalse(atest);
// this passes
Assert.IsNotNull(x);
// this passes
Assert.IsNotNull(y);
// this fails (expected) but with NullReferenceException (unexpected)
Assert.That(x, Is.EqualTo(y));
}
}
另一个奇怪的是,当值相等时,测试正确传递。另外值得注意的是,当我使用Assert.AreEqual(x, y)
堆栈追踪:
at NUnit.Framework.Assert.ReportFailure(String message)
at NUnit.Framework.Assert.ReportFailure(ConstraintResult result, String message, Object[] args)
at NUnit.Framework.Assert.That[TActual](TActual actual, IResolveConstraint expression, String message, Object[] args)
at NUnit.Framework.Assert.That[TActual](TActual actual, IResolveConstraint expression)
at VSI.Tests.NunitTest.TestIt() in c:\Users\DavidBecker\Documents\Visual Studio 2013\Projects\VSI.Tests\VSI.Tests\NunitTest.cs:line 30
工具:
.NET Framework 4.5.1版 Visual Studio 2013专业版 Resharper Version 9
编辑:我正在从Resharper运行测试。答案 0 :(得分:2)
你认为ReSharper 9是个问题。
ReSharper在ReSharper版本10之前不支持NUnit 3.然而,NUnit版本2和版本3之间存在许多相似之处,这意味着一些较旧的NUnit 2版本将出现运行NUnit 3测试 - 然而,这不会准确完成,既不支持也不建议。
在NUnit 2(2.6.4)的最终版本中 - 放入了一个例外,如果尝试加载NUnit 3测试运行器会立即失败,而不是尝试以不支持的方式运行测试。然而,似乎ReSharper 9使用的是比NUnit 2.6.4更早的跑步者,它不会抛出这个错误。
使用NUnit 3.6只能让您明白的原因是内部更改了如何在NUnit中注册断言。巧合的先前成功现在不再成功 - 尽管在很多方面,这是一个优势,因为它摆脱了这种右侧失败,测试似乎正在通过,但实际上并没有正确运行。
ReSharper支持版本10的NUnit 3,尽管我认为当他们从一次性购买模式切换到订阅模式时,我认为这一点。作为另一种选择 - 考虑使用NUnit 3测试适配器(NuGet包或VSIX扩展) - 它允许您使用Visual Studio自己的测试窗口单独运行NUnit测试。
(如果您对更多信息感兴趣,最近在GitHub上出现了这个问题:https://github.com/nunit/nunit/issues/1992)
答案 1 :(得分:0)
在Resharper中运行NUnit.3.6.0测试(9)单元测试运行器具有意外结果。请改用NUnit.ConsoleRunner.3.6.0。
(这对我有用,如果有人有更好的方法或者可以让它在RS9中工作那么请告诉我。)