通用技术 junit5-TestExecutionListener,参数化测试的时候失败的 test,获取结果 “SUCCESSFUL”

shixing · April 07, 2020 · Last by shixing replied at April 08, 2020 · 626 hits

java test code


import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;

import java.util.stream.Stream;


public class test {
@ParameterizedTest
@MethodSource("userGenerator")
void testFail1(String name,String pw) {
Assertions.assertEquals(name,pw);
}
public static Stream<Arguments> userGenerator(){
return Stream.of(Arguments.of("15138493452", "hlf2016"));
}
}
public class TestListener implements TestExecutionListener {
/*
* ... ...
*/


public void executionFinished(TestIdentifier testIdentifier, TestExecutionResult testExecutionResult) {


}
if ("SUCCESSFUL".equals(testExecutionResult.getStatus().name())) {

// testExecutionResult.getStatus().name() = "SUCCESSFUL"
}

}

调试截图

截图

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 5 条回复 时间 点赞

junit5没用过,这个如果你跳转testExecutionResult.getStatus().name() 看看源码是怎么样得。

shixing #2 · April 08, 2020 作者
陈子昂 回复

问题提交到开源,收到回复,如下:

@ParameterizedTest method is technically a "container" in JUnit 5, but the individual parameterized test method invocations below that container are "tests".

认为@ParameterizedTest是一个容器,而非一个test 。

赞,你的寻求帮助的方式很正能量。那再加一个test的注释?

恒温 回复

@Test @ParameterizedTest两个注解不能同时用, @ParameterizedTest 认为是一个容器,容器中存放test。
共同使用会有冲突,或者被重复执行。

单独使用@ParameterizedTest 时,这个容器下会使用传递的参数自动创建tests(个人理解),所以 是我的判读方法有问题,不能直接去用testExecutionResult.getStatus().name()去判断,因为可能拿到的是容器的执行结果 。

正确的判断是否为 testIdentifier.isTest(),会返回一个布尔值 ,确定是用例时,在去通过testExecutionResult.getStatus().name()取用例执行结果

大概就这是这样子

shixing #5 · April 08, 2020 作者

贴上issue地址,https://github.com/junit-team/junit5/issues/2247
感谢大神的答疑解惑。

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up