2017-09-20 43 views
0

我使用JUnit Jupiter版本5.0.0(发布版本),我试图使用测试发现功能。 Junit的文档可以在7.1.1中找到。从http://junit.org/junit5/docs/5.0.0/user-guide/#launcher-api-discovery使用JUnit 5发现测试不执行LoggingListener(实现TestExecutionListeners)

我发现执行测试为:

import static org.junit.platform.engine.discovery.ClassNameFilter.includeClassNamePatterns; 
import static org.junit.platform.engine.discovery.DiscoverySelectors.selectPackage; 

import org.junit.platform.launcher.Launcher; 
import org.junit.platform.launcher.LauncherDiscoveryRequest; 
import org.junit.platform.launcher.TestExecutionListener; 
import org.junit.platform.launcher.TestIdentifier; 
import org.junit.platform.launcher.TestPlan; 
import org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder; 
import org.junit.platform.launcher.core.LauncherFactory; 
import org.junit.platform.launcher.listeners.LoggingListener; 

public class MainPrueba { 

    public static void main(String[] args) throws InterruptedException { 

     Runnable task =() -> { 
      System.out.println("Runing thread INI"); 

      LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request() 
       .selectors(
         selectPackage("org.package.qabootfx.test.ping") 
         //,selectClass(QabootfxApplicationTests.class) 
       ) 
       .filters(
        //includeClassNamePatterns(".*Test") 
         includeClassNamePatterns(".*") 
       ) 
       .build(); 

      Launcher launcher = LauncherFactory.create(); 

      TestPlan testPlan = launcher.discover(request); 

      for (TestIdentifier root : testPlan.getRoots()) { 
       System.out.println("Root: " + root.toString()); 

       for (TestIdentifier test : testPlan.getChildren(root)) { 
        System.out.println("Found test: " + test.toString()); 
       } 
      } 

      // Register a listener of your choice 
      //TestExecutionListener listener = new SummaryGeneratingListener(); 
      TestExecutionListener listener = LoggingListener.forJavaUtilLogging(); //new LoggingListener(); 
      launcher.registerTestExecutionListeners(listener); 


      launcher.execute(request); 

      System.out.println("Runing thread END"); 

     }; 
     new Thread(task).start(); 

     Thread.sleep(5000); 
     System.out.println("END"); 
    } 

} 

检查LoggingListener类的实现,我们可以看到,这个必须打印到控制台的结果。例如:

package org.junit.platform.launcher.listeners; 

@API(status = MAINTAINED, since = "1.0") 
public class LoggingListener implements TestExecutionListener { 

    .... 

    @Override 
    public void testPlanExecutionStarted(TestPlan testPlan) { 
     log("TestPlan Execution Started: %s", testPlan); 
    } 

    @Override 
    public void testPlanExecutionFinished(TestPlan testPlan) { 
     log("TestPlan Execution Finished: %s", testPlan); 
    } 

    ... 

} 

和我的测试类是:

public class QabootfxApplicationTest { 

    @Test 
    public void testAbout() { 
     System.out.println("TEST Execution.... QabootfxApplicationTests.testAbout()"); 

     assertEquals(4, 5, "The optional assertion message is now the last parameter."); 
    } 
} 

我很期待看到类似的东西控制台:

2017-09-20 10:53:48.041 INFO 11596 --- TestPlan Execution Started: .... 
2017-09-20 10:53:48.041 INFO 11596 --- TestPlan Execution Finished: .... 

,但我什么也看不到类似到“... TestPlan Execution Started ...”。

控制台输出为:

Runing thread INI 
Root: TestIdentifier [uniqueId = '[engine:junit-jupiter]', parentId = null, displayName = 'JUnit Jupiter', legacyReportingName = 'JUnit Jupiter', source = null, tags = [], type = CONTAINER] 
Found test: TestIdentifier [uniqueId = '[engine:junit-jupiter]/[class:org.package.qabootfx.test.ping.QabootfxApplicationTest]', parentId = '[engine:junit-jupiter]', displayName = 'QabootfxApplicationTest', legacyReportingName = 'org.package.qabootfx.test.ping.QabootfxApplicationTest', source = ClassSource [className = 'org.package.qabootfx.test.ping.QabootfxApplicationTest', filePosition = null], tags = [], type = CONTAINER] 
TEST Executon.... QabootfxApplicationTests.testAbout() 
Runing thread END 
END 

可能是一个错误?我正在执行错误?

回答

3

为什么你会期望LoggingListener.forJavaUtilLogging()创建的监听器记录日志级别为INFO ......当文档明确指出以下内容?

创建使用FINE日志级别LoggingListener委托给一个java.util.logging.Logger

如果你想LoggingListener记录在INFO级别的消息,你就必须使用它接受这样LoggingListener.forJavaUtilLogging(Level.INFO)日志级别的其他工厂方法来创建它。

+0

谢谢,它正在工作。我尝试了LoggingListener.forJavaUtilLogging(Level.ALL);它并没有打印任何东西来控制。 java.util.logging.Level的Java文档声明:级别ALL可用于启用所有消息的日志记录,但此级别不起作用。但与Level.INFO是好的。感谢Sam – Sergio

相关问题