是否可以使用可在多个测试类中使用的通用@Before
和@After
灯具?
我已根据模块(库存,销售,购买等)将测试(分类)分开。对于所有这些测试,用户登录是先决条件,目前我在每个类的@Before
中都有。问题是当我需要更改用户ID或密码时,我需要更改每个类。有没有办法编写可以在所有测试类中使用的@Before
/ @After
?在这种情况下,测试套件是否可以派上用场?
答案 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个解决方案:
使用规则。您可以实现执行所需操作的自定义规则,然后将其添加到您需要的每个测试用例中。
public class MyTest {
@Rule Rule myBeforeAfterRule = new MyTestLifecycleRule();
// your code
}
基于规则的解决方案IMHO更灵活,因为继承并不总是适用于所有用例。此外,您可以在一个测试用例中组合多个规则。