เมื่อคุณใช้ 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