【发布时间】:2012-10-19 12:28:00
【问题描述】:
所以现在我正在使用 JUnit 4 并在 @BeforeClass 方法中设置了重置用户架构或准备示例数据所需的一切。
现在,并不是我不喜欢这种方法,而是我发现它非常令人沮丧,原因如下:
- 我正在使用 Parameterized 注释对不同的输入数据运行相同的测试。参数化不适用于
@BeforeClass,因为@BeforeClass使用静态方法。
这意味着如果我想保留@BeforeClass 逻辑,我必须复制测试。我不能使用@After 和@Before,因为这些都会在每次测试之后发生,这将是一个开销。
我想我可以重构这个单元测试,因为我将编写一个处理测试的抽象类,并为我想尝试的每个组参数编写一个子类,这样我就可以只编写一次测试代码。
我希望您可以建议一个更简洁的选项,起点如下:使用@Parameterized,每个参数组只需要运行一次“数据库”方法。
编辑:
这是我的班级没有 BeforeClass 的示例
RunWith(LabelledParameterized.class)
public class TestCreateCampaign extends AbstractTestSubscriberCampaign {
public TestCreateCampaign(String label, String apiKey, String userKey,
int customerId) {
super(label, apiKey, userKey, customerId);
}
@Before
public void setUp() throws Exception {
super.setUp();
}
@After
public void tearDown() throws Exception {
super.tearDown();
}
@Parameters
public static Collection<Object[]> generatedData() {
return DataProvider.generatedCorrectSubscriberData();
}
@Test
public void testCreateEmailCampaignBothTriggered() {
// TEST
}
@Test
public void testCreateTextCampaignTriggered() {
// TEST
}
@Test
public void testCreateTextCampaignTest() {
// TEST
}
// Other Tests
}
【问题讨论】:
-
那么目前,您是否使用
Enclosed和多个参数化内部类?每个都在*类中使用静态设置方法?每个参数组一次?请澄清。 -
当你说参数化在 BeforeClass 上不起作用时,你是什么意思?您的意思是该方法没有运行,还是以错误的顺序运行?你能发布一些示例代码吗?
-
@MatthewFarwell 我相信他的意思是 BeforeClass 只运行一次,而不是每组参数化值运行一次。之前为每个测试运行一次。我相信他想要每个参数化的值集一次。