junit中测试类的通用@before和@after

问题描述 投票:3回答:4

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

我已经根据模块(库存,销售,采购等)将测试(分为几类)。对于所有这些测试,用户登录是前提条件,当前我在每个课程的@Before中拥有它。问题是当我需要更改用户ID或密码时,我需要在每个班级中进行更改。有没有一种方法可以编写可在所有测试类中使用的@Before / @After?在这种情况下,测试人员是否可以派上用场?

java junit4 testcase
4个回答
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
    }
}

5
投票

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


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;
    }
}

1
投票

我知道2个解决方案:

  1. 使用@vikingsteve的注释中提到的抽象基类。
  2. 使用规则。您可以实施自己所需的自定义规则,然后将其添加到所需的每个测试用例中。

    public class MyTest {
        @Rule Rule myBeforeAfterRule = new MyTestLifecycleRule();
    
        // your code
    }
    

基于规则的解决方案恕我直言更加灵活,因为继承并不总是适用于所有用例。此外,您可以在一个测试用例中组合多个规则。

© www.soinside.com 2019 - 2024. All rights reserved.