簡體   English   中英

如何在Visual Studio 2010中調試Nunit測試

[英]How to debug Nunit test in Visual Studio 2010

我在調試VisualStudio的NUnit測試時遇到問題。 我創建了一個空項目(控制台應用程序),然后我添加了對NUnit庫的引用並編寫了一個簡單的測試。

namespace ReimplementingLinq.Tests
{
    [TestFixture]
    public class WhereTest
    {
        [Test]
        public void SimpleFiltering()
        {
            int[] source = { 1, 2, 3, 4, 2, 8, 1 };
            var result = source.Where(val => val < 4);
            int[] expected = {1,2,3,4};
            CollectionAssert.AreEqual(expected, result);
        }
    }
}

接下來我遵循此鏈接中給出的建議如何從Visual Studio以調試模式運行NUnit? 但是那個主題的解決方案都不適合我。 執行測試時沒有遇到任何斷點。 我嘗試通過附加到流程以及使用帶參數的外部程序運行項目來測試解決方案。

我該怎么做才能調試我的單元測試?

直接使用Visual Studio運行或調試NUnit測試

看馬'沒有擴展名!

只需配置您的測試項目,以便在按F5 (開始調試)或Ctrl-F5 (無需調試時啟動)時,它將自動啟動NUnit GUI並執行其中的所有測試。 如果遇到任何斷點,您也可以簡單地調試測試代碼。

帶圖像的分步指南向您展示了如何操作。

懶惰是所有發明的母親 :-)

假設您使用的是Visual Studio以外的Visual Studio版本,則可能會使用TestDriven.NET

安裝后

  1. 在測試方法中設置斷點
  2. 右鍵單擊並從Test With菜單中選擇Debugger
  3. 調試器應該啟動並命中你的斷點

遺憾的是,您不能將此方法用於Visual Studio的Express版本,因為TestDriven.NET是Visual Studio的插件,而Express版本不支持使用插件

在控制台應用程序中運行測試

您還可以通過控制台應用程序在調試器中運行測試:

  1. 創建一個新的控制台應用程
  2. 參考您的單元測試項目
  3. 在控制台應用程序的Main方法內部,創建測試fixuture的新實例,然后調用其中一個測試方法。 例如,如果我有一個名為MyTests的夾具和一個名為Test1的測試,我會寫:

     var myTests = new MyTests(); myTests.Test1(); 
  4. 在創建MyTests類的實例的行處設置斷點,然后按F5

  5. 調試器將命中你的斷點,然后你可以使用F11進入你的TestFixture的構造函數,或者將其轉入測試本身

如果您使用的是NUnit 2.4,則可以將以下代碼放入SetUpFixture類中。 (您可以使用舊版本執行此操作,但您需要執行與SetUpFixture相同的任何操作,或將其復制到測試本身。)

[SetUpFixture]
public class SetupFixtureClass
{
    [SetUp]
    public void StartTesting()
    {
        System.Diagnostics.Debugger.Launch();
    }
}

Debugger.Launch()所做的是在單擊NUnit內部運行時顯示以下對話框。

JIT調試器對話框

然后,在項目打開的情況下選擇正在運行的visual studio實例(我的屏幕截圖中的第二個),然后將附加調試器,並且任何斷點或異常都將顯示在Visual Studio中。

看看CodePlex上的NHarness

它是一個非常簡單,基於反射的測試運行器庫,可識別NUnit屬性,可以從Visual Studio Express中的項目運行,從而允許進行調試測試。

它目前具有測試類級別的粒度,但據推測,方法級調用將很快添加。

與NUnit 2.5.3有同樣的問題,並最終找到了不同的解決方案。 看看這是否適合您:

打開NUnit GUI並進入“工具”菜單“設置...”對話框。 在Settings樹中選擇Test Loader部分的Assembly Isolation子部分。 在NUnit進程中將Default Process Model設置為Directly。

我將它設置為在單個單獨的進程中運行測試,這就是為什么調試器無法將我測試的dll鏈接到用於調試它的符號。 我仍然使用每個程序集使用sperate AppDomain作為我的默認域使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM