Java junit中测试类的通用@before和@after
是否有可能在多个测试类中使用一个通用的Java junit中测试类的通用@before和@after,java,junit4,testcase,Java,Junit4,Testcase,是否有可能在多个测试类中使用一个通用的>之前和>之后夹具 我已经根据模块(库存、销售、采购等)将测试(划分为类)分开。对于所有这些测试,用户登录是一个先决条件,目前我在每个类的@之前都有它。问题是当我需要更改用户id或密码时,我需要在每个类中进行更改。是否有一种方法可以在所有测试类中使用,在/@之前之后编写?在这种情况下,testsuite是否能派上用场?之前的@和之后的适用于继承: public abstract class AbstractTestCase { @Before
>
之前和>之后夹具
我已经根据模块(库存、销售、采购等)将测试(划分为类)分开。对于所有这些测试,用户登录是一个先决条件,目前我在每个类的@之前都有它。问题是当我需要更改用户id或密码时,我需要在每个类中进行更改。是否有一种方法可以在所有测试类中使用,在
/@之前
之后编写?在这种情况下,testsuite是否能派上用场?之前的@和之后的
适用于继承:
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
}
}
您可以在抽象父类中使用@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;
}
}
您可以为测试套件创建@ClassRule
。每次测试都会调用它。有关如何在之前/之后应用,请参见API和示例。我知道两种解决方案:
使用@vikingsteve评论中提到的抽象基类
使用规则。您可以实现您的自定义规则,该规则执行您需要的操作,然后将其添加到您需要的每个测试用例中
public class MyTest {
@Rule Rule myBeforeAfterRule = new MyTestLifecycleRule();
// your code
}
基于规则的解决方案IMHO更加灵活,因为继承并不总是适用于所有用例。此外,您可以在一个测试用例中组合多个规则 你试过把它们放在一个抽象的父类中吗?这个问题有很多很好的答案,但是我建议如果你需要在很多地方提供登录信息,那么你可能想看看你的类结构。测试一个处理登录的类,并在需要登录的任何地方模拟该类。模拟确实是一个好主意。然而,我正在寻找的方法更多的是通用的,而登录就是一个例子。有些人说我找不到合适的链接来嘲弄。你能提供一个例子或链接@Xetius吗?尽管steve首先提供了答案,但还是将此标记为答案-因为这扩展了覆盖的方法-谢谢Andre