java - 断言失败时触发函数

标签 java junit junit4 assert infinitest

我正在使用 Java 中提供的 CodeModel 来生成复杂的代码。我已经设法以这样的方式设置我的单元测试,以便测试生成小但功能完整的 Java 代码,该代码在内存中编译,并从内存加载生成的类。如果我不输出生成的代码,一般来说一切都相当快。

由于生成器代码不知道生成的类,因此我使用反射来触发生成的类上的方法,效果很好。当我使用反射来通过检查对象的状态来确保方法完成预期的工作时,这些方法也可能会失败。

我的问题是我不想在每次运行测试时记录生成的代码。但我想在测试失败时查看生成的代码。有很多测试,由于我使用 infintest,我的 Eclipse 变得更慢,因为Infinist 不断累积各种测试的输出。

我可以设置 junit 以便在测试失败时调用我的函数吗?例如

boolean compileSuccessful = compile();
Assert.assertTrue("Ooops, you generated bad code", compileSuccessful);

如果上述断言失败,我想输出生成的代码并看看出了什么问题。

最佳答案

您可以使用 TestRule ,它将生成的代码添加到失败测试的输出中。我建议延长TestWatcher.

public class GeneratedCodeLogger extends TestWatcher {
  private Logger log;

  public GeneratedCodeLogger(Logger log) {
    this.log = log;
  }

  @Override
  protected void failed(Description d) {
    System.out.println(log.toString());
  }
}

您的测试必须使用此规则并将生成的代码记录到记录器。

关于java - 断言失败时触发函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14845971/

相关文章:

java - 如何在 Android 中执行 Java HTTP GET 调用并等待响应?

java - @After 和 @Before 注解不执行第二个方法

java - 验证场景的事务性 Spring Junit4 测试用例

java - 继续向类(class)提供信息

java - JMeter 使用 JavaImported 导入定义的 JAR

java - 同步对类字段的访问

java - 从 JUnit 命令行获取测试列表

c# - 将一项测试应用于两个不同的类(class)

maven - surefire-plugin 不尊重 threadCount 参数

java - 如何使用spring实现lazy db数据获取