我有这样的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下只有两个测试,而如上面的代码所示,却只有三个。
Pierre-Luc Pineault:您可能是对的,但即使我改掉它:
Assert.Greater(42, i);
...它仍然通过。
我不确定要遵循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的全部内容)
为了回应下面的一些评论(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 :\ project \ sscs \ CStore \ Development \ Development \ HHS.Web.Tests \ HHS.Web.Tests.nunit”
CodeCaster建议:“将测试运行器的完整路径与您的输出路径进行比较”
如何确定两者(“来自测试运行器的完整路径”和“ [我的]输出路径”)?上面的路径(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代码块...
无需在项目的“开始”选项中指定.nunit文件,而是指定测试dll名称而不包含任何路径信息。如果每次都在重建此文件,则应保证您正在加载正确的文件。
如果在Assert上设置了一个断点,则返回值是否符合您的期望?如果不是这样,则说明您正在处理nunit-agent.exe,或者不是每次都在重新编译测试程序集。
要验证您使用的是正确的程序集,请使用Sysinternals Suite中的Process Explorer查找NUnit实际加载的dll。删除该程序集并重新编译。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句