本篇內容介紹了“.Net怎么使用Xunit工具進行單元測試”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
Xunit的安裝現在不需要插件支持了,直接使用NuGet安裝如下兩個庫即可:
PM> Install-Package xunit PM> Install-Package xunit.runner.visualstudio -Pre (Visual Studio測試瀏覽器支持, VS2015目前必須裝Pre的)
一個簡單的測試用例如下:
public class TestClass1
{
[Fact]
public void testMax()
{
Assert.Equal(3, Math.Max(3, 2));
}
[Fact]
public void testFail()
{
Assert.Equal(2, Math.Max(3, 2));
}
}在測試瀏覽器中執行RunAll即可(修改后不用編譯,它會自動編譯)

Xunit里面不需要TestClass之類Attribute來標記測試用例類,只需要滿足如下條件即可:
測試類必須是public的
測試用例用FactAttribute標記
Assert類用來驗證測試測試函數的輸出結果。
Assert.Equal(3, Math.Max(3, 2));
也可以使用一些擴展的斷言庫,常用的就是xunit.should庫,它是以擴展函數的方式進行驗證,看起來更加舒服。
PM> Install-Package xunit.should
Math.Max(3, 2).ShouldBe(3);
不過,這個庫和新版本的XUnit適配不是很好,我這里寫了一個簡單的版本:
static class AssertExtension
{
public static void ShouldBe<T>(this T value, T exprected)
{
if(Equals(value, exprected))
return;
var msg = $"與預期結果不一致,當前值是 '{format(value)}', 期望值是 '{format(exprected)}'";
throw new InvalidOperationException(msg);
}
public static void ShouldNotBe<T>(this T value, T notExprected)
{
if (!Equals(value, notExprected))
return;
var msg = $"與預期結果不一致,當前值不應該是 '{format(notExprected)}' ";
throw new InvalidOperationException(msg);
}
static string format(object value)
{
return value == null ? "NULL" : value.ToString();
}
}Xunit里面并不是通過SetUp和TearDown標記來表明測試用例的構建和析構操作,它每次執行測試用例的時候都會插件測試用例類,執行完成后,如果其實現了IDispose接口,則會調用Dispose函數,更加簡潔明了。也就是說:
在測試用例類的構造函數指向數據構建操作
在Dispose函數中指向數據清理操作
Xunit并不是通過Attribute來標記異常捕獲的,而是直接使用Assert.Throws斷言函數來驗證異常。
public class TestClass1
{
[Fact]
public void testException()
{
Assert.Throws<InvalidOperationException>(() => operation());
}
void operation()
{
throw new InvalidOperationException();
}
}[Fact(DisplayName = "Max函數測試")]
[Fact(Skip ="重構未完成")]
[Trait("Group", "Category")]
“.Net怎么使用Xunit工具進行單元測試”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。