我现在正在使用JUnit作为测试工程数据的框架(参考:上一个问题Creating a Java reporting project -- would like to use JUnit and Ant but not sure how)
由于图片(错误的代码块)告诉1000个单词,所以让我粘贴我的循环:
JUnitCore junit = new JUnitCore();
RunListener listener = new RunListener();
junit.addListener(listener);
[...]
for (AbstractFault fault : faultLog) {
theFault = fault;
Result result = junit.run(GearAndBrakeFaultLogReports.class);
for (Failure f : result.getFailures()) {
output.println(log.getName());
output.println(fault.getName());
output.println(HelperFunctions.splitCamelCase(f.getDescription()
.getMethodName()));
output.println(f.getMessage());
output.println();
}
}
如您所见,我多次运行“junit.run”(对于日志中的每个故障)。
但是,如果我的任何一个测试都触发了一个失败(),我不想重复那个测试。换句话说,如果日志中有50个故障,并且在故障#1中测试失败,我不想在我正在循环的49个未来故障中尝试该测试。
以下是一个示例测试:
private static boolean LeftMLGDownTooLongFound = false;
@Test
public final void testLeftMLGDownTooLong() {
if (!LeftMLGDownTooLongFound
&& handleLDGReportFaults(false)
&& theFault.getName().equals(FaultNames.LDG_LG_DWN_TIME.toString())) {
assertNotGreater(getPCandRecNum(), 8f, ldgFault.getLeftStrutUpTime());
LeftMLGDownTooLongFound = true;
}
}
目前,对此,我正在制作一个首先设置为false的静态bool,但在第一个断言后切换为true。不确定这是否有效,但它的想法。我不希望每次测试都做到这一点(100个)。
在JUnitCore或Runner类中是否有任何公共函数,方法或方法可以标记它,以便在调用fail()后测试永远不会运行多次?
答案 0 :(得分:0)
@Rule public TestName name = new TestName();
@Before
public void testNonFailedOnly() {
Assume.assumeTrue(!failedTests.contains(name.getMethodName()));
}
private static List<String> failedTests = new ArrayList<String>(256);
@Rule
public TestWatcher watchman = new TestWatcher() {
/* (non-Javadoc)
* @see org.junit.rules.TestWatcher#failed(java.lang.Throwable, org.junit.runner.Description)
*/
@Override
protected void failed(Throwable e, Description description) {
super.failed(e, description);
failedTests.add(description.getMethodName());
}
};
它确实增加了大约1.5秒的开销,这很糟糕......但比替代方案更好!
任何人都有关于如何优化这个的想法?我相信开销是来自TestWatcher,不要认为是来自arraylist。
答案 1 :(得分:0)
我使用了每个测试extends
的Java类。
在这个类的@Before
中,我设置了一个布尔值hasPassed = false;
在每个@Test
方法结束时,我设置了此变量hasPassed = true;
在@AfterMethod
中,您可以检查变量。
如果您的测试导致异常,它将不会到达结尾,变量仍然是假的。