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

时间:2014-10-24 17:39:04

标签: java eclipse junit testcase test-suite

我需要重复使用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;
    }
}

CASE 1是添加测试用例最明显的方法,但不能设置我的私有字段。 CASE 2是我想要做的但是没有用,因为我的测试的属性fName是null(我在Eclipse中使用调试透视图看到它)。最后一种情况CASE 3似乎有效,但我不想使用这种方法。

有没有更优雅和简单的方法来重用相同的测试用例? 感谢

1 个答案:

答案 0 :(得分:1)

你不需要套件。您可以为此

使用参数化类
@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);
    }
}

有关参数化测试的更多信息,请参阅JUnit wiki