Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试断言某些值时显示java.lang.UnsupportedOperationException_Java - Fatal编程技术网

尝试断言某些值时显示java.lang.UnsupportedOperationException

尝试断言某些值时显示java.lang.UnsupportedOperationException,java,Java,我使用下面的代码在测试脚本中断言文本。但每次点击此代码时,它都会给出UnsupportedOperationException错误 public static void verifyEquals(Object actual, Object expected) { try { Assert.assertEquals(actual, expected); } catch(Throwable e) { addVerific

我使用下面的代码在测试脚本中断言文本。但每次点击此代码时,它都会给出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);
    }
publicstaticvoidverifyequals(实际对象,预期对象){
试一试{
Assert.assertEquals(实际、预期);
}捕获(可丢弃的e){
添加验证失败(e);
}
}
公共静态列表getVerificationFailures(){
List verificationFailures=verificationFailuresMap.get(Reporter.getCurrentTestResult());
返回verificationFailures==null?新建ArrayList():verificationFailures;
}
私有静态void addVerificationFailure(可丢弃的e){
StackTraceElement[]错误=e.getStackTrace();
列表错误=数组.asList(错误);
verificationFailuresMap.put(Reporter.getCurrentTestResult(),errors);
List verificationFailures=getVerificationFailures();
verificationFailuresMap.put(Reporter.getCurrentTestResult(),verificationFailures);
验证失败。添加(e);
}
有人能帮我吗?

这就是问题所在:

List verificationFailures = getVerificationFailures();
verificationFailuresMap.put(Reporter.getCurrentTestResult(), verificationFailures);
verificationFailures.add(e);
您正在调用
List。在
数组的结果中添加
。asList
。您不能这样做,因为数组是
的结果。asList
是数组的一个视图-您不能添加或删除元素

另外-除擦除外-该列表是一个
列表
-它由一个
StackTraceeElement[]
支持。添加一个可丢弃的
是什么意思

如果删除将列表放入映射中的代码,然后在添加之前再次将其取回,则更容易发现问题:

private static void addVerificationFailure(Throwable e) {
    StackTraceElement[] error = e.getStackTrace();
    List<StackTraceElement> errors = Arrays.asList(error);
    verificationFailuresMap.put(Reporter.getCurrentTestResult(), errors);
    errors.add(e);
}
私有静态void addVerificationFailure(可丢弃的e){
StackTraceElement[]错误=e.getStackTrace();
列表错误=数组.asList(错误);
verificationFailuresMap.put(Reporter.getCurrentTestResult(),errors);
添加(e);
}
现在,由于尝试将一个
可丢弃文件添加到
列表中,因此在编译时此操作将失败。但是,即使您试图添加
stackTraceeElement
,由于
数组,它仍然会失败。asList
不支持
add


确实不清楚您想做什么,但您需要重新考虑……

它在哪一行抛出异常?测试代码不应该像这样复杂。Quis custodiet ipsos custodes?为什么要使用原始类型?+1,或者换句话说(如果我没有弄错的话),
Arrays.asList()
返回一个固定大小的列表-我们不能向固定大小的列表中添加元素。感谢Jon的回复。我实际上遵循了这个链接:在测试脚本中使用软断言。但是代码片段不起作用,所以我做了一些更改。另外,我对Java还不太了解。@alfasin:这是问题之一,是的。@ss:这至少解释了
实际的
/
预期的
顺序-TestNG使用这种方法,而JUnit(更常见的框架)使用相反的顺序。