修改 背景:我们正在构建一个存储客户对一组类别的偏好的应用程序。
如果您没有X1类型的首选项,则用例的类型不能创建首选项X2。永远不应该创建X3,但您应该能够向系统询问它。
我想要做的是为客户可以拥有的每个首选项组合运行一组测试,以确保我们不会做出愚蠢的更改并破坏任何业务规则。
如果我在测试类中为特定的首选项组合编写每个测试,我已经确定我需要编写64个测试。但它总共或多或少只有16个测试,我可以一遍又一遍地重复。
customerCanCreatePreferenceX customerCanCreatePreferenceX
实施 我编写了一组我想要执行的测试用例。
我用@Category注释了每个测试,并以这种方式对测试进行分组。
为了运行我的测试,我创建了一个使用Categories-runner运行的测试套件。
我想为每个Category-group创建一个测试套件,并在执行每个测试之前以某种方式将上下文重置为某个状态。
这可能吗?怎么样?
注意:我试图在测试套件中使用@Before,但这不是由跑步者执行的。似乎Categories忽略@ Before-annotation或仅运行测试类中的那些,AllTests
我也尝试在TestRule上使用@Rule,但这显示了与@Before相同的行为。
我花了8个小时左右的谷歌搜索,阅读文档和观看youtube教程,但我仍然无法解决这个问题。
也许我创建测试的方式都错了?也许我应该以一种聪明的方式使用参数化测试?
示例代码:
public class AllTests {
@Test
@Category({GroupA.class, GroupB.class})
public void testCase1(){
//Some test code
}
@Test
@Category({GroupA.class})
public void testCase2(){
//Some test code
}
}
@RunWith(Categories.class)
@IncludeCategory({GroupA.class})
@SuiteClasses({AllTests.class})
public class GroupATestSuite{
// How to create context for GroupA-tests
}
@RunWith(Categories.class)
@IncludeCategory({GroupB.class})
@SuiteClasses({AllTests.class})
public class GroupBTestSuite{
// How to create context for GroupB-tests
}