我可以在SetUp中建立我的TestCaseData串列嗎?因為在這種設定下,我的測驗只是被跳過了。其他常規測驗運行得很好。
[TestFixture]
public class DirectReader
{
private XDocument document;
private DirectUblReader directReader;
private static UblReaderResult result;
private static List< TestCaseData> rootElementsTypesData = new List<TestCaseData>()。
[SetUp]
public void Setup()
{
var fileStream = ResourceReader.GetScenario("RequiredElements_2_1.xml"/span>)。
document = XDocument.Load(fileStream);
directReader = new DirectUblReader()。
結果 = directReader.Read(document);
//span>這是否允許?
rootElementsTypesData.Add(new TestCaseData(result.Invoice.Id, new IdentifierType())。
rootElementsTypesData.Add(new TestCaseData(result.Invoice.IssueDate, new IdentifierType())。
}
[Test, TestCaseSource(nameof(rootElementsTypesData))]
public void Expects_TypeOfObject_ToBeTheSameAs_InputValue(object inputValue, object expectedTypeObject)。
{
Assert.That(inputValue, Is.TypeOf(expectedTypeObject.GetType())。
}
}
uj5u.com熱心網友回復:
不,這是不可能的
。用[SetUp]裝飾的方法會在每個測驗用例之前運行。
這意味著NUnit將首先建立測驗用例的串列,然后在每個測驗用例之前運行Setup()。
因此,你的Setup()永遠不會被呼叫,而測驗用例的串列仍然是空的。
uj5u.com熱心網友回復:
正如@IMil所說,答案是No...這是不可能的。
TestCaseSource被NUnit用來建立一個將要運行的測驗串列。它將一個方法與一組特定的引數聯系起來。然后,NUnit創建一個所有測驗的內部表示。
OTOH SetUp(甚至OneTimeSetUp在運行這些測驗時也會使用。到那個時候,測驗的數量和每個測驗的實際引數都是固定的,沒有什么可以改變它們。
因此,為了使測驗的數量和實際引數都是固定的。
因此,為了做你似乎想做的事情,你的TestCaseSource必須獨立存在,完全確定測驗要使用的引數。這就是為什么 NUnit 給你提供了使源成為一個方法或屬性的能力,而不僅僅是一個簡單的串列。
在你的案例中,我建議像這樣......
private static IEnumerable< TestCaseData> RootElementsTypesData()。
{
var fileStream = ResourceReader.GetScenario("RequiredElements_2_1.xml"/span>)。
document = XDocument.Load(fileStream);
directReader = new DirectUblReader()。
結果 = directReader.Read(document);
yield return new TestCaseData(result. Invoice.Id, new IdentifierType()))。
yield return new TestCaseData(result. Invoice.IssueDate, new IdentifierType())。
}
顯然,這只是 "論壇代碼",你必須使用它來獲得一些真正能編譯并適用于你情況的東西。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/310293.html
標籤:
