当前位置: 首页 > 面试题库 >

使用ANT在类或套件中运行所有测试时,如何打印当前正在执行的JUnit测试方法?

席嘉祯
2023-03-14
问题内容

我有一组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.
 * 
 * <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()



 类似资料:
  • 我在JUnit测试类中使用Javautil日志(JUL),JUL在默认配置中工作(即打印到控制台)。 使用和注释的方法中的日志语句在执行时将被打印,但“@Test”方法中的日志仅在所有测试执行完成后才被打印。 不确定到底是哪里出了问题,因为同样的方法在更早的时候就起作用了。 记录器实例化: 记录器用途: 测试用例使用maven运行。我注意到,只有在我开始使用这个surefire配置并行运行测试类后

  • 我一直在设置一些合约JUnit 4测试(遵循回答这个问题的建议) - 例如,如果我有一个接口(我已经在示例中包含了泛型,因为我在我的项目中使用它们) - 但是,这是一个大大简化的示例: 我可以创建一个抽象的合同测试,例如: ...并为每个实现扩展此抽象测试类(我使用。我还将一些变量传递给抽象测试类,以测试接口的实现。 然而,实际上,一些接口返回的对象是其他接口的实现,我希望能够使用该接口的抽象契约

  • 问题内容: 我有一个测试类,其中包含几种典型的测试方法,这些方法可以进行断言或检查异常,并带有注释。它们在我在Ant任务中调用以下指令时运行: 但是,在同一堂课中,我想提出几种基准性能方法,这些方法未包含在必须通过的测试中。我想要一个完全独立的Ant任务来运行这些基准测试。 有没有注释的方法介绍这种测试分类并分别调用每个类别?例如,带注释的方法将是第一类,然后虚构的方法将仅记录用于诊断报告的性能指

  • 是否有一种带注释的方法来引入这种测试分类并分别调用每个类别?例如。注释方法将是第一类,然后虚构的方法将只是用于诊断报告的日志性能指标,而不是执行决定成败的断言。我认为测试类是定位这些基准测试方法的最佳方式,但我不知道如何在Ant中封装它们的调用,以便它们单独运行。例如,是否可以在每个方法前缀“benchmark”,并告诉Ant只运行前缀有该前缀的方法,或者我可以编写自己的注释?

  • 问题内容: 我有一个测试套件,其结构如下 在以上结构中,我想执行testmethod4()作为最后一个。即)最后执行。有一个@FixMethodOrder注释,它按顺序执行方法而不是testclass。是否有任何机制可以同时维护测试类和测试方法中的顺序。使用@FixMethodOrder,我可以通过重命名测试方法的名称来执行该方法,但是我不能指示junit将测试类作为最后一个(最后一个)执行。 问