Когда вы используете TestCaseSource, вы фактически создаете «набор» тестов. Тест NUnit структурирован в виде дерева. Обычно ваша сборка будет верхним корнем дерева, а каждый класс внутри него — ветвью, которая, в свою очередь, разветвляется и включает все отдельные методы тестирования. то есть
-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, не копируют вверх или вниз по дереву иерархически.)
Так или иначе. Как это исправить? ???? Использование 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");
}
}
}
Надеюсь, это поможет!
person
Chris
schedule
03.04.2020