Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.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 获取衍生测试以正确报告结果_Java_Junit_Intellij Idea - Fatal编程技术网

Java 获取衍生测试以正确报告结果

Java 获取衍生测试以正确报告结果,java,junit,intellij-idea,Java,Junit,Intellij Idea,我已经创建了一个自定义JUnit4运行程序(extends BlockJUnit4Runner),其目的是在运行这些测试之前运行其他测试有效所必需的测试。例如,如果您正在测试某些文件IO,则读/写测试将需要打开/关闭测试才能正常工作 这可以使用任意数量的requires正确地运行测试,对于不需要任何其他内容的测试,它可以很好地返回报告,但是当我运行一个确实需要另一个的测试时,我会得到“Done:1/2”,并且事件日志会显示“tests passed:1 passed”。即使要求的测试(第二次运行

我已经创建了一个自定义JUnit4运行程序(extends BlockJUnit4Runner),其目的是在运行这些测试之前运行其他测试有效所必需的测试。例如,如果您正在测试某些文件IO,则读/写测试将需要打开/关闭测试才能正常工作

这可以使用任意数量的requires正确地运行测试,对于不需要任何其他内容的测试,它可以很好地返回报告,但是当我运行一个确实需要另一个的测试时,我会得到“Done:1/2”,并且事件日志会显示“tests passed:1 passed”。即使要求的测试(第二次运行)失败,情况也是如此


您的自定义运行程序应该预先定义
org.junit.runners.ParentRunner#getDescription
,然后IDEA将正确显示树

@Override
protected void runChild(FrameworkMethod method, RunNotifier notifier) {
    if (!alreadyRunMethods.containsKey(method.getName())) {
        boolean requiredMethodsPassed = true;
        for (Annotation anno : method.getAnnotations()) {
            if (anno instanceof Requires) {
                requiredMethodsPassed = runRequiredMethods((Requires) anno, notifier, method);
                break;
            }
        }
        if (requiredMethodsPassed) {
            super.runChild(method, notifier);
        }else{
            notifier.fireTestAssumptionFailed(new Failure(describeChild(method), new AssumptionViolatedException("Required methods failed.")));
        }
    }
}

private boolean runRequiredMethods(Requires req, RunNotifier notifier, FrameworkMethod parentMethod) {
    boolean passed = true;
    for (String methodName : req.value()) {
        FrameworkMethod method = methodByName.get(methodName);
        if (method == null) {
            throw new RuntimeException(String.format("Required test method '%s' on test method '%s' does not exist.", methodName, parentMethod.getName()));
        }
        runChild(method, notifier);
        Boolean methodPassed = alreadyRunMethods.get(method.getName());
        methodPassed = methodPassed == null ? false : methodPassed;
        passed &= methodPassed;
    }
    return passed;
}