[英]How to use NUnit TestCases with Generics with where constraint?
我正在嘗試按照此答案將 NUnit 與 Generic TestCase 一起使用: NUnit TestCase with Generics from@György Kőszeg 。
但是,由於我的測試,我需要使用where
約束和傳入的復雜類型(類),否則編譯器會出錯並出現錯誤 CS0314 。
[TestCase(typeof(SomeClass))]
[TestCase(typeof(SomeOtherClass))]
public void GenericTest<T>(T instance) where T : ISomeInterface
{
Console.WriteLine(instance);
}
SomeClass
和SomeOtherClass
是實現ISomeInterface
的有效類。
這確實失敗並出現以下錯誤:
加載測試時拋出異常。 System.ArgumentException: GenericArguments[0], 'System.RuntimeType', on '[...]GenericTestT' 違反了類型 'ISomeInterface' 的約束。
我不能讓它工作。 如果我將其更改為nameof(SomeClass)
以使用字符串值進行嘗試,我會得到與String
不匹配約束相同的錯誤。
哦,天哪,當然它必須從類型中干擾它。
因此,它變得有點困難,因為TestCases
需要是 static,但我們可以使用TestCaseSource
。
[TestCaseSource(nameof(GetTestCases))]
public void GenericTest<T>(T instance) where T : ISomeInterface
{
Console.WriteLine(instance);
}
private static IEnumerable<TestCaseData> GetTestCases()
{
yield return new TestCaseData(new SomeClass());
yield return new TestCaseData(new SomeOtherClass());
}
作為一個不相關的補充,如果您實際上不使用它並且只是想將它用於類型,則可以丟棄該instance
:
[TestCaseSource(nameof(GetTestCases))]
public void GenericTest<T>(T _) where T : ISomeInterface
{
// ...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.