[C#.NET] NUnit Test 初體驗

[C#.NET] NUnit Test 初體驗

一直以來都是使用 MS Test,由於 MS Test 測試 Exception 的語意,不是那麼的清楚,該是時候擁抱 NUnit 了

被測試類如下

public class Class1
{
    public string IsValid()
    {
        return "Hi,NUnit Test";
    }

    public string Hello(string name)
    {
        return "Hello, " + name;
    }

    public string GetValue()
    {
        throw new NotImplementedException("No Implement");
    }
}

 

本文章節:

NUnit Test Adapter

建立測試專案

Test Attribute

TestCase Attribute

Setup Attribute

TearDown Attribute

Exception


NUnit Test Adapter

開始前要先安裝 NUnit Test Adapter

有兩種方式安裝,第一個是從 Extensions and Updates,這個裝一次就好

image

 

另一個是從 Nuget 上取得,優缺點剛好跟上述方法相反

優點:別人拿到你的測試專案,不需要安裝 NUnit Test Adapter。

缺點:在不同的專案每次都要安裝,否則 VS 不認識它。

image

 

 

以上兩個方法擇一。

本篇選擇使用第二種方法。

 

建立測試專案

NUnit Test Adapter 裝完之後便可以在 Test Explorer 裡面看到相關的測試,接著便能動手開始寫,

建立一個 Unit Test 測試專案,然後把 MSTest 的 dll 移掉

image

 

Test Attribute

在 Unit Test  測試專案加入一個檔案,在方法上加上 [Test] ,依據3A原則,我很快的便建立了一個綠燈

Assert 斷言所提供的方式幾乎 MSTest 跟一樣

image

 

到目前為止,除了安裝步驟比 MSTest 麻煩一些,其餘的用法幾乎一樣

TestCase Attribute

參數化測試,這能允許我們把參數放在Attribute

[TestCase("yao")]
public void TestMethod2(string name)
{
    var expected = "Hello, " + name;
    Class1 c = new Class1();
    var actual = c.Hello(name);
    Assert.AreEqual(expected, actual);
}

 

在 Test Explorer 裡可以看到,兩個 TestCase 變成了兩個測試方法

image

 

 

也可以把 expected 寫在 TestCase

[TestCase("yao", "Hello, yao")]
public void TestMethod3(string name, string expected)
{
    Class1 c = new Class1();
    var actual = c.Hello(name);
    Assert.AreEqual(expected, actual);
}

 

image

 

Setup Attribute

測試方法執行"前"都會先執行 Setup 區段的方法

 

TearDown Attribute

測試方法結束"後"都會先執行 TearDown 區段的方法

 

範例如下:

[SetUp]
public void Before()
{
    //共用準備動作
}

[TearDown]
public void After()
{
    //結束動作
}

 

Exception

先用 Assert.Catch 捕捉例外,然後用 StringAssert 驗証例外訊息,這樣的寫法比 MSTest 的 ExoectedException 方法好太多的多,使用方法請參考
http://www.dotblogs.com.tw/yc421206/2012/05/20/72279

public void TestMethod4()
{
    Class1 c = new Class1();
    var expected = "No Implement";
    var actual = Assert.Catch<NotImplementedException>(() => c.GetValue());
    StringAssert.Contains(expected, actual.Message);
}

 


 

基本上,上述的API應該都能夠讓我們調用我們想要完成的測試

更多的 Attribute,請參考以下

http://www.nunit.org/index.php?p=attributes&r=2.6.4

文章出自:http://www.dotblogs.com.tw/yc421206/2015/06/20/151603

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo