我有这样的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;:
另外,我不明白为什么只有两个测试显示在\ Integration Test \ HHSClientIntegration Tests下面,当有三个时,如上面的代码所示。
Pierre-Luc Pineault:你可能是对的,但即使我扭转它:
Assert.Greater(42, i);
......它仍然过去了。
我不确定我需要检查什么才能跟进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的全部内容)
为了回应下面的一些评论(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;
推荐使用CodeCaster,&#34;将测试运行器的完整路径与输出路径进行比较&#34;
我如何确定这两件事(&#34;来自测试跑步者的完整路径&#34;以及&#34; [我的]输出路径&#34;)?上面的路径(C:\ project \ sscs \ CStore \ Development \ Development \ HHS.Web.Tests \ HHS.Web.Tests.nunit)是否为测试运行路径?或... ???
从上面的尖叫中可以看出,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都有相应的代码块......
答案 0 :(得分:1)
不要在项目的“开始选项”中指定.nunit文件,而是指定没有任何路径信息的测试dll名称。如果每次都重建此文件,则应保证您正在加载正确的文件。
如果在Assert上设置断点,返回值是否与您期望的一致?如果没有,您可能是dealing with nunit-agent.exe,或者您每次都没有重新编译测试程序集。
要验证您使用的是正确的程序集,请使用Sysinternals Suite中的Process Explorer找到NUnit实际加载的dll。删除该程序集并重新编译。