JUnit 4创建测试用例以使用通用功能的正确方法是什么:例如几个单元测试类通用的设置?我所做的是创建一个测试用例并将通用功能放在@Before
方法中,然后任何需要它的测试用例都会扩展基类。但是,这似乎需要在每个子类中执行:super.setUp()
。
有更好的方法吗?
修改
实际上我建议的解决方案不起作用。有时JUnit会调用基类TWICE。一旦它碰巧首先在基类上运行测试,并且当它到达子类时再次运行(至少我认为这是发生的事情)。因此,“继承”常见测试用例功能的更好方法将非常棒。
答案 0 :(得分:5)
如果您使用@Before
annotation:
super.setup()
编写测试时,通常会发现需要进行多项测试 他们之前创建的类似对象 能跑。诠释公共空白 使用
@Before
的方法会导致该方法 在Test方法之前运行。该 超类的@Before
方法会 在当前的那些之前运行 类。
我建议这样的事情:
@Before
public void initForAll() {}
在super / Main类
中和任何
@Before
public void initTest() {...}
在你的测试用例中。
编辑:
在编辑中回答您的问题。
@BeforeClass
,每个TestClass将调用一次private boolean initialized = false;
@BeforeClass
public static void init()
{
if(initialized)
{
return;
}
//Initialize everything
initialized = true;
}
。 我是这样做的:
{{1}}
答案 1 :(得分:0)
这是一个非常好的方法。如果你在子类上有setUp()
,那么是的,你必须调用super.setUp()
,但实际上,这有多难?
答案 2 :(得分:0)
您是否尝试过其他方法? 不是使用通用功能创建基类,而是使用静态方法创建一个具有常用功能的util类。然后在每个测试用例的@Before注释方法中调用util方法。
答案 3 :(得分:0)
如果你的基类有一个方法public void setUp(),你的子类也是如此,那么子类的setUp方法会覆盖基类的同名和签名方法,所以只调用子类的方法(并且可以在调用基类的方法时调用它;不确定这个)。
解决方案是调用基类设置方法,例如: baseSetup()。然后他们都会被自动调用。 Joachim的答案确实解决了命名问题,但我想更清楚地了解方法覆盖的效果。