.netcore持續整合測試篇之Xunit資料驅動測試
阿新 • • 發佈:2019-08-12
>[系列目錄](https://www.cnblogs.com/tylerzhou/p/11204826.html)
Nunit裡提供了豐富的資料測試功能,雖然Xunit裡提供的比較少,但是也能滿足很多場景下使用了,如果資料場景非常複雜,Nunit和Xunit都是無法勝任的,有不少測試者選擇自己編寫一個數據提供程式,但是更建議使用AutoFixture框架,一是因為自己工作中寫的往往只是為了解決某個或者部分問題,只能隨著業務邏輯的擴展才能不斷的健壯起來,二是這樣的框架往往缺少良好文件,主要由核心開發者口口相傳,這就導致後來者遇到不明白了功能就去問核心開發者,影響這些開發者的其它工作.
下面介紹一下Xunit裡的資料提供方式.
### InlineData
InlineData相當於Nunit裡的TestCase,用註解的方式給測試方法提供資料.
我們通過以下程式碼片段瞭解它的基本用法
```cs
[Theory]
[InlineData(1, 2)]
[InlineData(5, 9)]
public void Test1(int x,int y)
{
int result = x + y;
Assert.Equal(x + y, result);
}
```
以上方法與普通測試方法相比最大的區別是它使用的是Theory註解,而不是fact註解.使用Theory註解的方法必須提供相應的引數,否則會報編譯錯誤.
以上測試我們提供了兩組InlineData,這樣在測試執行的時候測試方法就會根據這些資料生成兩個方法例項.同Nunit裡的表現行為相似.
## MemberData
MemberData顧名思義,就是成員資料,它類似於Nunit裡的`TestCaseSource`但是不同的是Xunit的MemberData的資料提供者必須是當前測試類的成員,測試資料提供者和測試方法耦合在一塊可能不是太好的設計,如果需要大量測試資料,建議使用AutoFixture.
### 資料提供者之屬性提供資料
通過屬性提供測試資料適應於一些比較簡單的場景,這些資料是簡單的,確定的.
下面看一個示例
```cs
[Theory]
[MemberData(nameof(UnitTest1.ProvideData))]
public void Test1(int x,int y)
{
int result = x + y;
Assert.Equal(x + y, result);
}
public static IEnumerable