簡體   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