gpt4 book ai didi

java - JUnit5断言全部

转载 作者:行者123 更新时间:2023-11-30 02:06:08 26 4
gpt4 key购买 nike

代码如下所示。我希望它去测试 keyNames 的所有元素。但是,如果任何测试失败,它就会停止,并且不会迭代所有数组元素。我的理解是,在assertAll中,所有断言都会被执行,并且任何失败都应该一起报告。

感谢您的时间和帮助。

private void validateData(SearchHit searchResult, String [] line){

for(Integer key : keyNames){
String expectedValue = getExpectedValue(line, key);
String elementName = mappingProperties.getProperty(key.toString());

if (elementName != null && elementName.contains(HEADER)){
assertAll(
() -> assumingThat((expectedValue != null && expectedValue.length() > 0),
() -> {
String actualValue = testHelper.getHeaderData(searchResult, elementName);

if(expectedValue != null) {
assertEquals(expectedValue, actualValue, " ###Element Name -> " + elementName +" : Excepted Value ### " + expectedValue + " ### Actual Value ###" + actualValue);
}
}
)
);

}

}
}

最佳答案

Assertions.assertAll() 的 javadoc状态:

Asserts that all supplied executables do not throw exceptions.

实际上您提供了一个 ExecutableassertAll()在每次迭代时。
因此,循环的任何迭代中的失败都会终止测试执行。

事实上,您调用了多次 assertAll()每次最多请求一个断言:

if(expectedValue != null) {
assertEquals(expectedValue, actualValue, " ###Element Name -> " + elementName +" : Excepted Value ### " + expectedValue + " ### Actual Value ###" + actualValue);
}

你想要做的是相反的事情:调用assertAll()通过传递多个 Executable执行所需断言的实例。

所以你可以将它们收集在 List 中使用经典循环并以这种方式传递它: assertAll(list.stream())或创建 Stream<Executable>无需任何收集并直接传递,如 assertAll(stream)

这是一个带有 Stream 的版本(根本没有测试),但你应该明白:

Stream<Executable> executables = 
keyNames.stream()
.map(key->
// create an executable for each value of the streamed list
()-> {
String expectedValue = getExpectedValue(line, key);
String elementName = mappingProperties.getProperty(key.toString());

if (elementName != null && elementName.contains(HEADER)){
assumingThat((expectedValue != null && expectedValue.length() > 0),
() -> {
String actualValue = testHelper.getHeaderData(searchResult, elementName);
if(expectedValue != null) {
assertEquals(expectedValue, actualValue, " ###Element Name -> " + elementName +" : Excepted Value ### " + expectedValue + " ### Actual Value ###" + actualValue);
}

}
);

}

}
);
Assertions.assertAll(executables);

关于java - JUnit5断言全部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51308316/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com