我正在使用 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/