我宁愿建议对这两种方法使用不同的测试类。
class MyTestCase {
@Before
public void setUp() {
/* Default setup */
}
public void testHomepage() {
// test some stuff
}
}
class MyRedTestCase extends MyTestCase {
@Before
public void setUp() {
super.setUp();
/* Red setup */
}
}
然后您可以将您的测试放入分别从 MyTestCase 和 MyRedTestCase 扩展的 2 个不同的类中。
class BlueTest extends MyTestCase {
@Test
public void testBlueFlavouredHomepage() { // assuming Blue is my default flavour
testHomepage();
}
}
class RedTest extends MyRedTestCase {
@Test
public void testRedFlavouredHomepage() {
testHomepage();
}
}
你也可以用另一种方式来做,而不需要引入新的类。在父类中声明一个抽象(或具有默认值的具体)方法。
class MyTestCase {
protected abstract Flour getFlour();
}
你的孩子班看起来像这样
class SomeTest extends MyTestCase {
private Flour flour;
@Test
public void testRedFlavouredHomepage() {
flour = Flour.RED;
testHomepage();
}
@Test
public void testBlueFlavouredHomepage() { // assuming Blue is my default flavour
flour = Flour.BLUE;
testHomepage();
}
public void testHomepage() {
// test some stuff
}
protected abstract Flour getFlour() {
return flour;
}
}
我会说第一个解决方案是“更清洁”;即使您必须创建额外的类,您也不会在一个类中包含不同类型的逻辑(例如在反模式God object中)。