簡體   English   中英

如何將 NUnit TestCases 與 Generics 一起使用,並具有 where 約束?

[英]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);
}

SomeClassSomeOtherClass是實現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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM