我有一组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
答案 0 :(得分:7)
不幸的是,没有好方法可以挂钩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.
*
* <p>Typical usage:
*
* <p>{@code @Rule public LogTestName logTestName = new LogTestName();}
*
* <p>See also:
* <br>{@link org.junit.Rule}
* <br>{@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()
的记录器。
答案 1 :(得分:1)
您可以尝试使用formatter
将type设置为plain。
<formatter type="plain" usefile="false"/>
或
您可以通过扩展org.apache.tools.ant.taskdefs.optional.junit.JUnitResultFormatter
类来使用工具自定义格式化程序。
答案 2 :(得分:0)
如果您不想创建自己的测试运行器,可以尝试使用stacktrace。
以下方法打印调用它的方法的类和方法名称。
public static void printMethod() {
System.out.println(Thread.currentThread().getStackTrace()[2]);
}
您必须在每个测试方法中调用此方法。
答案 3 :(得分:0)
添加showoutput="true"
导致我的junit测试在测试执行时记录输出:
junit fork="yes" showoutput="true" printsummary="withOutAndErr"
答案 4 :(得分:0)
从testStarted()
派生一个类并覆盖Description
方法。它会收到description.getMethodName()
参数,您可以从中获取测试类和测试方法 - 例如Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri = [Uri for your folder];
intent.setDataAndType(uri, "image/*");
startActivity(Intent.createChooser(intent, "Open [App] images"));
。
答案 5 :(得分:0)
您可以使用TestName
规则。只需将以下代码添加到测试类中即可:
@Rule
public TestName testName = new TestName();
@Before
public void printTestMethod() {
System.out.println("Running " + testName.getMethodName());
}