繁体   English   中英

为什么我的NUnit测试不会失败?

[英]Why are my NUnit Tests NOT failing?

我有这样的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,因此其断言也应该失败。 但是他们都“通过”:

在此处输入图片说明

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

UPDATE

Pierre-Luc Pineault:您可能是正确的,但是即使我撤消了它:

Assert.Greater(42, i);

...它仍然通过。

更新2

我不确定要遵循CodeCaster的建议“ 检查您是否正在测试包含所编写的代码的程序集(调试/发布,其他目录),特别是考虑到您会进行最少测试的说明,我到底需要检查什么” 在运行程序中比在代码中要多。

以下是一些可能值得注意的事情; 让我知道我想念/想要的东西。

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个项目(我只在其中几个项目); 在“我的世界”中,启动项目是三个库/ DLL,特别是HHS.API,HHS.Web和HHS.Web.Tests设置为“开始”; 所有其他都设置为“无”

HHS.Web.Tests的“调试”页面的“启动外部程序:”设置为“ C:\\ Program Files(x86)\\ NUnit 2.6.3 \\ bin \\ nunit.exe”,“命令行参数:”设置为“ C :\\项目\\ SSCS \\ CStore \\开发\\开发\\ HHS.Web.Tests \\ HHS.Web.Tests.nunit”

更新4

CodeCaster建议:“将测试运行器的完整路径与输出路径进行比较”

如何确定两者(“来自测试运行器的完整路径”和“ [我的]输出路径”)? 上面的路径(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代码块...

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

如果您在断言上设置了断点,返回值是否符合您的期望? 如果不是,则说明您正在处理nunit-agent.exe,或者不是每次都在重新编译测试程序集。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM