运行 来自 java 的测试用例并在 Eclipse JUnit 视图上显示结果
Run TestCase from java and display results on Eclipse JUnit view
我定义了一些 classes,每一个都有几个 public 带有 @Test 注释的方法。所有方法都遵循相同的行为模式(从 ID 检索资源、测试是否为空、记录、为资源上的每一行调用真实测试)。所以,我在抽象中具体化了这种行为 class 我实例化了每个方法,如下所示:
@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 subclass 中执行得很好,像这样:
TestCase junit_test = new TestCase(){
@Override
public void runTest() {
pattern.run();
}
};
junit_test.run();
但是,在 Eclipse 的 JUnit 视图中 displayed/listed 没有测试。我只看到成功的测试次数。
我怎样才能做到这一点 ?谢谢。
您可能需要自定义 Runner
才能找到用您的 @TestPattern
方法注释的所有方法。 (可能还有 @Test
?)
那么您的测试 class 将如下所示:
@RunWith(YourRunner.class)
public class YourTest{
@TestPattern(param1="X",param2="Y",param3="Z")
public void someTest(){
...
}
@Test
public void anotherNormalTest(){
...
}
}
This Blog 解释了如何编写自定义 Runner。但是您可能可以通过扩展 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 classes 无缝集成并与 JUnit IDE 视图
一起工作
祝你好运
我定义了一些 classes,每一个都有几个 public 带有 @Test 注释的方法。所有方法都遵循相同的行为模式(从 ID 检索资源、测试是否为空、记录、为资源上的每一行调用真实测试)。所以,我在抽象中具体化了这种行为 class 我实例化了每个方法,如下所示:
@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 subclass 中执行得很好,像这样:
TestCase junit_test = new TestCase(){
@Override
public void runTest() {
pattern.run();
}
};
junit_test.run();
但是,在 Eclipse 的 JUnit 视图中 displayed/listed 没有测试。我只看到成功的测试次数。 我怎样才能做到这一点 ?谢谢。
您可能需要自定义 Runner
才能找到用您的 @TestPattern
方法注释的所有方法。 (可能还有 @Test
?)
那么您的测试 class 将如下所示:
@RunWith(YourRunner.class)
public class YourTest{
@TestPattern(param1="X",param2="Y",param3="Z")
public void someTest(){
...
}
@Test
public void anotherNormalTest(){
...
}
}
This Blog 解释了如何编写自定义 Runner。但是您可能可以通过扩展 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 classes 无缝集成并与 JUnit IDE 视图
一起工作祝你好运