【问题标题】:Junit 5 execute test on attribute test classJunit 5对属性测试类执行测试
【发布时间】:2022-01-10 15:17:38
【问题描述】:

您好,我得到了一个抽象的 BaseTest 和第二个具有此 BaseTest 的 2 属性实现

我想调用属性类上的所有@Test。

一些代码:

public abstract class BaseTest<T> {

 public abstract T getInstance();
@BeforeEach
 public void setup(){
   this.instance = getInstance();
 }
@Test
all test methods ....

我想用这个 BaseTest 的 2 个实现创建第二个类 喜欢

class TwoImplOfBaseTest {
private BaseTest<Integer> testA;
private BaseTest<String> testB;

 @Test
 public void testAll(){
 //write something like testA.doAllTest();
     //write something like testB.doAllTest();

}

感谢阅读

【问题讨论】:

    标签: java unit-testing junit junit5


    【解决方案1】:

    我认为你过于复杂了。如果我理解正确,由于 A 和 B 之间的常见测试用例,您有 BaseTest 类。@Test 和几乎所有其他 junit 注释都是从超类继承的,除非该方法被覆盖。在这种情况下,您所需要的只是创建 BaseTest 的具体实现。 JUnit 将初始化测试类实例,运行所有@Test 方法等。

    public class TestA extends BaseTest<Integer> {
      //init stuff if needed
    }
    

    其他类

    public class TestB extends BaseTest<String> {
      //init stuff if needed
    }
    

    就是这样,junit runner 将从 BaseTest 为 TestA 然后为 TestB 运行所有 @Test 方法。

    【讨论】:

      【解决方案2】:

      如果您的目标是运行抽象类中的所有@Test 方法,以及所有扩展类,那么这已经发生了。您可以通过任何 IDE(Intellij/Eclipse)进行测试

      但是,如果目标是以编程方式选择 N 个类,并直接从 Java 运行它们的方法,那么您可以按如下所述进行:

      在我看来,最好遵循其他答案,因为这允许报告插件直观地向您显示通过/失败的内容和统计信息。

      这取决于您要达到的目标:


       public class RunJUnit5TestsFromJava {
      
            SummaryGeneratingListener listener = new SummaryGeneratingListener();
        
            public void runASingleClass() {
      
                LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
                    .selectors(selectClass(FirstUnitTest.class))
                    .build();
                  Launcher launcher = LauncherFactory.create();
                  TestPlan testPlan = launcher.discover(request);
                  launcher.registerTestExecutionListeners(listener);
                  launcher.execute(request);
              }
      
           public void runAllClassesUnderPackage() {
      
                  LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
                    .selectors(selectPackage("com.package.where.your.test.classes.are"))
                    .filters(includeClassNamePatterns(".*Test"))
                    .build();
                  Launcher launcher = LauncherFactory.create();
                  TestPlan testPlan = launcher.discover(request);
                  launcher.registerTestExecutionListeners(listener);
                  launcher.execute(request);
              }
          }
      
       
          RunJUnit5TestsFromJava runner = new RunJUnit5TestsFromJava();
          runner.runAll();
          
          TestExecutionSummary summary = runner.listener.getSummary();
          summary.printTo(new PrintWriter(System.out));
          
      

      参考:https://www.baeldung.com/junit-tests-run-programmatically-from-java

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-30
        • 1970-01-01
        相关资源
        最近更新 更多