手动实例化测试用例并将其添加到 JUnit 不起作用



我需要重用一个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。

最新更新