Когда вы используете TestCaseSource, вы фактически создаете «набор» тестов. Тест NUnit структурирован в виде дерева. Обычно ваша сборка будет вершиной root дерева, а каждый класс в этой ветви - ветвь, которая, в свою очередь, включает все отдельные методы тестирования. т.е.
-Test1
- TestClassA -Test2
-Test3
TestAssembly
-Test4
- TestClassB -Test5
-Test6
Вы можете увидеть эту структуру, если взгляните на TestResults. xml.
Когда вы используете TestCaseSource
, вы фактически создаете другой уровень в дереве , Итак, теперь ваше дерево выглядит следующим образом.
-Test1A
-TestCaseSourceSuite -Test1B
-Test1C
- TestClassA -Test2
-Test3
TestAssembly
-Test4
- TestClassB -Test5
-Test6
В вашем примере TestCaseSourceSuite
будет называться SampleTest
. Причина того, что то, что у вас сейчас есть, не работает, заключается в том, что атрибут TestOf
в настоящее время применяется к TestCaseSourceSuite
, а не к Test1A
, Test1B
Test1C
. (Такие свойства, как TestOf, иерархически не копируют дерево вверх или вниз.)
В любом случае. Как мы это исправим? Test Использование TestCaseData для вашего TestCaseSource кажется лучшим выбором. TestOfAttribute на самом деле не находит большого применения, поэтому для установки значения не существует «именованного свойства», но вместо этого вы можете использовать метод SetProperty
и класс PropertyNames
. Попробуйте что-нибудь вроде этого ...
public class MyTests
{
[TestCaseSource(typeof(MyDataClass), "TestCases")]
public void Test(int n, int d)
{
Assert.IsTrue(true);
}
}
public class MyDataClass
{
public static IEnumerable TestCases
{
get
{
yield return new TestCaseData(12, 3).SetProperty(PropertyNames.TestOf, "MethodUnderTest");
yield return new TestCaseData(12, 2).SetProperty(PropertyNames.TestOf, "MethodUnderTest");
}
}
}
Надеюсь, это поможет!