[英]C# NUnit parameterized TestCaseSource value identification
我在NUnit 2.6.1上使用TestCaseSource來測試具有不同對象類構造函數參數的相同Assert。
我的意思是,
[Test, TestCaseSource("myConstructorsForMale")}
public void CheckMale(Person p)
{
Assert.That(p.IsMale);
}
static Person[] myConstructorsForMale =
{
new Person("John"),
new Person(isMale=true),
new Person("Doe")
};
好的,一切運行正常,但這是我在NUnit控制台上收到的結果:
- CheckMale
- CheckMale(人)
- CheckMale(人)
- CheckMale(人)
所以我不知道每次迭代執行的測試是什么,如果其中任何一個失敗,我就無法得到失敗的測試。
我的問題是:有沒有辦法用一個注釋或類似的東西來識別傳遞給測試的參數是什么? (在TestCaseSource屬性方式中做)
謝謝。
如果使用“本機”NUnitor ReSharper作為測試運行器,您可以重寫ToString
方法,以便您具有良好的Person定義。 例如,您的測試代碼可能如下所示:
public class PersonTests
{
[Test, TestCaseSource("myConstructorsForMale")]
public void CheckMale(Person p)
{
Assert.That(p.IsMale);
}
static Person[] myConstructorsForMale =
{
new Person("John"),
new Person{IsMale=true},
new Person("Doe")
};
}
人類可能是這樣的:
public class Person
{
public Person(string name)
{
this.Name = name;
}
public Person() { }
public string Name { get; set; }
public bool IsMale { get; set; }
public override string ToString()
{
return string.Format("Name:{0};IsMale:{1}", Name, IsMale);
}
}
結果窗口如下所示:
我還在你可能使用的原生NUnit測試運行器上檢查過它。 它還可以很好地顯示人物:
重復Ilya Ivanov的回答,如果你不想修改被測試的類只是為了測試它,你可以把“to string”邏輯放在測試夾具中。
添加一個方法到夾具,如:
IEnumerable<TestCaseData> PersonTestCases()
{
myConstructorsForMale.Select(
p => new TestCaseData(p).SetName(string.Format("Name:{0};IsMale:{1}" ,p.Name, p.IsMale));
);
}
這myConstructorsForMale
列表中的每個Person創建一個TestCaseData
實例。 訣竅是它設置TestCaseData
實例的Name
屬性以告訴測試運行器要顯示什么。
一些測試運行器可能更適合使用SetDescription
而不是SetName
。
然后將TestCaseSource
屬性修改為:
[Test, TestCaseSource("PersonTestCases")]
這應該導致類似於:
- CheckMale
- 名稱:; IsMale:真
- 名稱:母鹿; IsMale:假
- 姓名:John; IsMale:假
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.