JUnit:使用Categories时运行@ Before-method

时间:2017-03-31 16:34:55

标签: java unit-testing junit

修改 背景:我们正在构建一个存储客户对一组类别的偏好的应用程序。

如果您没有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
}

0 个答案:

没有答案