如何使用ANT在类或套件中运行所有测试时打印当前执行的junit测试方法?
我有一组JUnit测试用例,我使用junit任务从ANT执行它们。 在执行测试时,在控制台中我只能看到当前正在运行的测试用例(java类),而不是测试方法。 有没有办法打印当前正在执行的测试方法? 或者除了拥有自己的JUnit测试运行器之外还有其他方法吗?
控制台输出示例
[junit] Running examples.TestCase1 [junit] Tests run: 3, Failures: 0, Errors: 0, Time elapsed: 2.835 sec
相反,我希望得到输出
[junit] Running examples.TestCase1 [junit] Running examples.TestCase1.test1 [junit] Running examples.TestCase1.test2 [junit] Running examples.TestCase1.test3 [junit] Tests run: 3, Failures: 0, Errors: 0, Time elapsed: 2.835 sec
不幸的是,没有好的方法可以挂钩到JUnit。 对于使用TDD开发的框架,它令人惊讶地充满敌意。
请改用@Rule
:
import org.junit.rules.TestWatcher; import org.junit.runner.Description; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Log the currently running test. * * Typical usage: * *
{@code @Rule public LogTestName logTestName = new LogTestName();} * *
See also: *
{@link org.junit.Rule} *
{@link org.junit.rules.TestWatcher} */ public class LogTestName extends TestWatcher { private final static Logger log = LoggerFactory.getLogger( "junit.logTestName" ); @Override protected void starting( Description description ) { log.debug( "Test {}", description.getMethodName() ); } }
笔记:
我正在使用静态记录器。 这使代码执行得更快但我的主要原因是记录测试名称是一个贯穿各领域的问题:我想在中央位置启用/禁用此日志记录,而不是为每个测试类配置它。
另一个原因是我有处理构建输出的工具,并且更容易配置固定模式:-)
如果您不想这样,那么只需获取description.getTestClass()
的记录器。
您可以通过将type设置为plain来尝试使用formatter
。
要么
您可以通过扩展org.apache.tools.ant.taskdefs.optional.junit.JUnitResultFormatter
类来使用实现自定义格式化程序。
如果您不想创建自己的测试运行器,可以尝试使用stacktrace。
以下方法打印调用它的方法的类和方法名称。
public static void printMethod() { System.out.println(Thread.currentThread().getStackTrace()[2]); }
您必须在每个测试方法中调用此方法。
添加showoutput="true"
导致我的junit测试在测试执行时记录输出:
junit fork="yes" showoutput="true" printsummary="withOutAndErr"
从RunListener
派生一个类并覆盖testStarted()
方法。 它接收一个Description
参数,您可以从中获取测试类和测试方法 – 例如description.getMethodName()
。