我需要重用一个TestCase,所以我在我的测试用例中创建了一个私有字段"role":
public class ATest extends TestCase {
private String role;
public void setRole(String userName) {
role = userName;
}
@Test
public void method1(){
System.out.println("role:"+role);
}
现在,我想使用相同的"ATest"类创建一个包含多个测试用例的套件:
public class AllTests {
public static Test suite() {
TestSuite suite = new TestSuite(AllTests.class.getName());
//CASE 1: Works fine
suite.addTestSuite(ATest.class);
//CASE 2: Doesn't work fName is null
ATest aTest = new ATest();
aTest.setRole("Admin");
suite.addTest(aTest);
//CASE 3: works but ugly
ATest aTest2 = new ATest();
aTest2.setName(aTest2.getClass().getMethods()[1].getName());
aTest2.setRole("AnotherUser");
suite.addTest(aTest2);
return suite;
}
}
CASE1是添加测试用例的最明显的方法,但不能设置我的私有字段。CASE2是我想要做的,但不起作用,因为我的测试的属性fName为null(我在Eclipse中使用调试透视图看到了它)。最后一个案例case 3似乎有效,但我不想使用这种方法。
有没有更优雅、更简单的方法来重用同一个测试用例?感谢
您不需要一个套件。您可以为此使用参数化类
@RunWith(Parameterized.class)
public class ATest { //with JUnit4, no need to extend from something
@Parameters
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][] {
{ "firstRole" }, { "SecondRole" }, { "ThirdRole" }
});
}
private final String role;
public ATest(String role) {
this.role = role;
}
@Test
public void test() {
System.out.println("role:"+role);
}
}
有关参数化测试的更多信息,请参阅JUnitwiki。