常见的@before和@after用于junit中的测试类

时间:2014-06-25 08:32:38

标签: java junit4 testcase

是否可以使用可在多个测试类中使用的通用@Before@After灯具?

我已根据模块(库存,销售,购买等)将测试(分类)分开。对于所有这些测试,用户登录是先决条件,目前我在每个类的@Before中都有。问题是当我需要更改用户ID或密码时,我需要更改每个类。有没有办法编写可以在所有测试类中使用的@Before / @After?在这种情况下,测试套件是否可以派上用场?

4 个答案:

答案 0 :(得分:7)

@Before@After适用于继承:

public abstract class AbstractTestCase {

    @Before
    public void setUp() {
        // do common stuff
    }
}

如果你想在每个测试用例中做特定的事情,你可以覆盖它:

public class ConcreteTestCase extends AbstractTestCase {

    @Before
    @Override
    public void setUp() {
        super.setUp();
        // do specific stuff
    }
}

答案 1 :(得分:5)

您可以为测试套件创建@ClassRule。每次测试都会调用它。有关如何在之前/之后申请的详细信息,请参阅 ExternalResource 的API和示例。

答案 2 :(得分:2)

您可以在抽象父类中使用@Before注释,如下所示:

public class TestMe extends TestParent {
    @Test
    public void test() {
        System.out.println("Hi, here is a test. The username is: " + getUsername());
    }
}

与父类:

public abstract class TestParent {
    private String username;

    @Before
    public void setUp() {
        username = "fred";
    }

    public String getUsername() {
        return username;
    }
}

答案 3 :(得分:1)

我知道2个解决方案:

  1. 使用@vikingsteve评论中提到的抽象基类。
  2. 使用规则。您可以实现执行所需操作的自定义规则,然后将其添加到您需要的每个测试用例中。

    public class MyTest {
        @Rule Rule myBeforeAfterRule = new MyTestLifecycleRule();
    
        // your code
    }
    
  3. 基于规则的解决方案IMHO更灵活,因为继承并不总是适用于所有用例。此外,您可以在一个测试用例中组合多个规则。