我使用以下代码在我的测试脚本中断言文本。但是每次遇到这段代码时它都会给出UnsupportedOperationException错误。
public static void verifyEquals(Object actual, Object expected) {
try {
Assert.assertEquals(actual, expected);
} catch(Throwable e) {
addVerificationFailure(e);
}
}
public static List<Throwable> getVerificationFailures() {
List verificationFailures = verificationFailuresMap.get(Reporter.getCurrentTestResult());
return verificationFailures == null ? new ArrayList() : verificationFailures;
}
private static void addVerificationFailure(Throwable e) {
StackTraceElement[] error = e.getStackTrace();
List<StackTraceElement> errors = Arrays.asList(error);
verificationFailuresMap.put(Reporter.getCurrentTestResult(), errors);
List verificationFailures = getVerificationFailures();
verificationFailuresMap.put(Reporter.getCurrentTestResult(), verificationFailures);
verificationFailures.add(e);
}
有人可以帮我吗?
答案 0 :(得分:2)
这是问题所在:
List verificationFailures = getVerificationFailures();
verificationFailuresMap.put(Reporter.getCurrentTestResult(), verificationFailures);
verificationFailures.add(e);
您在List.add
的结果上致电Arrays.asList
。您不能这样做,因为Arrays.asList
的结果是视图到数组上 - 您无法添加或删除元素。
另外 - 擦除 - 该列表是List<StackTraceElement>
- 它由StackTraceElement[]
支持。向{1}添加Throwable
甚至意味着什么?
如果删除将列表放入地图的代码,然后在添加之前再将其取回,则更容易看到问题:
private static void addVerificationFailure(Throwable e) {
StackTraceElement[] error = e.getStackTrace();
List<StackTraceElement> errors = Arrays.asList(error);
verificationFailuresMap.put(Reporter.getCurrentTestResult(), errors);
errors.add(e);
}
由于尝试将Throwable
添加到List<StackTraceElement>
,现在编译时会失败。但即使您尝试添加StackTraceElement
,由于Arrays.asList
不支持add
,仍仍会失败。
目前还不清楚你要做什么,但你需要重新考虑一下......