为什么我的NUnit测试没有失败?

时间:2014-06-30 22:50:25

标签: c# nunit integration-testing assertions

我有这样的NUnit测试代码:

[Test]
public void TestHHSInterface()
{
    var HHSClient = IOC.container.Resolve<IHHSClient>();

    var s = HHSClient.GetTestMessage("Rupert", "Pupkin");

    Assert.Greater(s.Value.Length, 0);
}

[Test]
public void TestHHSDeliveryInterface()
{
    var Delivery = IOC.container.Resolve<IHHSDelivery>();

    var i = Delivery.GetCount();

    Assert.Greater(i, 42); // was 17; returns 18
}

[Test]
public void TestHHSDeliveryItemInterface()
{
    var Delivery = IOC.container.Resolve<IHHSDeliveryItem>();

    var i = Delivery.GetCount();

    Assert.Greater(i, 42); // was 19; returns 36
}

TestHHSDeliveryInterface()测试(IHHSDelivery)返回18,因此声明它大于42应该使它失败。类似地,TestHHSDeliveryItemInterface()返回36,因此它的断言也应该失败。但他们都通过&#34;:

enter image description here

另外,我不明白为什么只有两个测试显示在\ Integration Test \ HHSClientIntegration Tests下面,当有三个时,如上面的代码所示。

更新

Pierre-Luc Pineault:你可能是对的,但即使我扭转它:

Assert.Greater(42, i);

......它仍然过去了。

更新2

我不确定我需要检查什么才能跟进CodeCaster的建议&#34; 检查您是否正在测试包含您编写的代码的程序集(调试/发布,不同的目录),特别是你的评论,你看到跑步者的测试,而不是代码。&#34;

以下是一些值得注意的事情;让我知道我失踪/应该寻找的东西。

Test项目的Build属性页面显示:

Configuration: Active (Debug)
Output path: bin\Debug

App.config包含以下行:

<compilation debug="true" targetFramework="4.5" />

HHS.Web.Tests.nunit包含:

<NUnitProject>
  <Settings activeconfig="Default" />
  <Config name="Default" binpathtype="Auto">
    <assembly path="bin\Debug\HHS.Web.Tests.dll" />
  </Config>
</NUnitProject>

(那是HHS.Web.Tests.nunit的全部内容)

更新3

为了回应下面的一些评论(CodeCaster,OnABauer),我不知道这是否有帮助,但解决方案有50个项目(其中我只做了几个);在我的世界里,&#34;启动项目是三个库/ DLL,特别是HHS.API,HHS.Web和HHS.Web.Tests设置为&#34; Start&#34 ;;所有其他人都设置为&#34;无&#34;

HHS.Web.Tests的Debug页面有&#34;启动外部程序:&#34;设置为&#34; C:\ Program Files(x86)\ NUnit 2.6.3 \ bin \ nunit.exe&#34;和&#34;命令行参数:&#34;设置为&#34; C:\ project \ sscs \ CStore \ Development \ Development \ HHS.Web.Tests \ HHS.Web.Tests.nunit&#34;

更新4

推荐使用CodeCaster,&#34;将测试运行器的完整路径与输出路径进行比较&#34;

我如何确定这两件事(&#34;来自测试跑步者的完整路径&#34;以及&#34; [我的]输出路径&#34;)?上面的路径(C:\ project \ sscs \ CStore \ Development \ Development \ HHS.Web.Tests \ HHS.Web.Tests.nunit)是否为测试运行路径?或... ???

更新5

从上面的尖叫中可以看出,TestHHSDeliveryInterface出现在正在运行的测试列表中(据称)。所以人们会认为TestHHSDeliveryItemInterface也会出现在那里。毕竟,TestHHSDeliveryInterface出现在代码中的所有地方,TestHHSDeliveryItemInterface也是如此:

HHSClientIntegrationtests:

[Test]
public void TestHHSDeliveryInterface()
{
    var Delivery = IOC.container.Resolve<IHHSDelivery>();

    var i = Delivery.GetCount();

    //Assert.Greater(i, 42); // was 17; should return 18
    //Assert.Greater(42, i); <= same result (passes)
    // Seeing if it's running at all
    Assert.Fail(); // <= Test still passes, so something is very fishy here...
}

[Test]
public void TestHHSDeliveryItemInterface()
{
    var Delivery = IOC.container.Resolve<IHHSDeliveryItem>();

    var i = Delivery.GetCount();

    Assert.Greater(i, 42); // was 19; should return 36
}

HHSClientPlayTest:

[Test]
public void TestHHSDeliveryInterface()
{
    var HHSDelivInterf = IOC.container.Resolve<IHHSDelivery>();
}

[Test]
public void TestHHSDeliveryItemInterface()
{
    var HHSDelivItemInterf = IOC.container.Resolve<IHHSDeliveryItem>();
}

HHSClientUnitTest:

[Test]
public void TestHHSDeliveryInterface()
{
    var HHSDelivInterf = IOC.container.Resolve<IHHSDelivery>();
}

[Test]
public void TestHHSDeliveryItemInterface()
{
    var HHSDelivItemInterf = IOC.container.Resolve<IHHSDeliveryItem>();
}

在IHHSDelivery存在的代码中的每个地方,IHHSDeliveryItem都有相应的代码块......

1 个答案:

答案 0 :(得分:1)

不要在项目的“开始选项”中指定.nunit文件,而是指定没有任何路径信息的测试dll名称。如果每次都重建此文件,则应保证您正在加载正确的文件。

如果在Assert上设置断点,返回值是否与您期望的一致?如果没有,您可能是dealing with nunit-agent.exe,或者您每次都没有重新编译测试程序集。

要验证您使用的是正确的程序集,请使用Sysinternals Suite中的Process Explorer找到NUnit实际加载的dll。删除该程序集并重新编译。