我使用@Test注释定义了一些类,每个类都有几个公共方法。所有方法都遵循相同的行为模式(从ID检索资源,测试是否为空,日志,为资源上的每一行调用真实测试)。所以,我在一个抽象类中将这种行为外化,我在每个方法上实例化,如下所示:
@Test
public void someTest(){
new BasicTestPattern("X","Y","Z"){ // some parameters to retrieve resources
@Override
protected void testLine(){
someCheck1();
someCheck2();
}
}.run();
}
该解决方案每种测试方法消除10-30行。 现在,我想进一步使用自定义注释,如:
@TestPattern(param1="X",param2="Y",param3="Z")
public void someTest(){
someCheck1();
someCheck2();
}
最后,我创建了一个小框架,用这个新的注释检索所有方法,以便实现BasicTestPattern并执行它。它在TestCase子类中执行得很好,如:
TestCase junit_test = new TestCase(){
@Override
public void runTest() {
pattern.run();
}
};
junit_test.run();
但是,Eclipse的JUnit视图中不显示/列出任何测试。我看到只有成功的测试数量。 我怎样才能做到这一点 ?谢谢。
答案 0 :(得分:0)
您可能需要创建自己的自定义Runner
才能找到使用@TestPattern
方法注释的所有方法。 (也可能还有@Test
?)
然后你的测试类看起来像这样:
@RunWith(YourRunner.class)
public class YourTest{
@TestPattern(param1="X",param2="Y",param3="Z")
public void someTest(){
...
}
@Test
public void anotherNormalTest(){
...
}
}
This Blog解释了如何编写自定义Runners。但是你可以通过扩展BlockJUnit4ClassRunner
来将你的特殊测试方法添加到要运行的测试列表中。
我认为你只需要覆盖computeTestMethods()
方法,这就是BlockJUnit4ClassRunner找到所有要运行的测试方法的方法(使用@Test注释的方法),你可以覆盖它来查找你自己注释的方法注释
public class your TestRunner extends BlockJUnit4ClassRunner{
protected List<FrameworkMethod> computeTestMethods() {
//this is all the @Test annotated methods
List<FrameworkMethod> testAnnotatedMethods = super.computeTestMethods();
//these are all the methods with your @TestPattern annotation
List<FrameworkMethod> yourAnnotatedMethods = getTestClass().getAnnotatedMethods(TestPattern.class);
//do whatever you need to do to generate the test
//methods with the correct parameters based on
//the annotation ?
//Might need to make fake or
//synthetic FrameworkMethod instances?
...
//combine everyting into a single List
List<FrameworkMethod> allTestMethods =...
//finally return all the FrameworkMethods as a single list
return allTestMethods;
}
}
您可能必须创建自己的FrameworkMethod
实现包装器以从注释中获取信息,并在调用方法之前执行所需的任何设置。
这将使它与普通的JUnit类无缝集成,并与JUnit IDE视图一起使用
祝你好运