java - 嵌套 do while 循环的 Junit 测试用例

标签 java spring unit-testing testing junit4

这是代码的骨架:

    flag1=True
    flag2=True
    do {

        try {

            if (){
                throw new IllegalArgumentException();
            }
            .
            .
            .
           do {

                if () {


                } 
               else {

                }
                .
                . 
                .
                if () {
                }

            } while (flag2);

            flag1 = false;

        } catch (RuntimeException ex) {

            flag1 = true;
        } catch (Exception ex) {

            flag1 = true;


        } catch (Error ex) {

            flag1= true;
        }
        }

    } while (flag1);
}

我正在使用junit4进行测试。我还需要覆盖所有 try catch block 以进行测试。 我编写了一个满足第一个 if 条件的测试用例,因此抛出非法参数异常,但抛出异常后,代码移动到 do 循环,且 flag1 始终保持 true。

最佳答案

首先,听起来您可能是一名 Java 初学者。如果是这样的话,我建议您阅读 Java 中的异常处理。我认为这会让您很容易理解这种行为的原因。以下是 Oracle 提供的有关该主题的一些快速教程:https://docs.oracle.com/javase/tutorial/essential/exceptions/

话虽如此,以下是我对导致您所描述的行为的原因的解释: 1. flag1 仍然为 true。 2.循环不停止。

1. flag1 未设置为 true 的原因是,当抛出 IllegalArgumentException 时,抛出位置和异常 catch block 之间的所有代码都将被跳过。这包括跳过行 flag1 = false;

2. 抛出 IllegalArgumentException 时 while 循环不退出的原因是 IllegalArgumentException 继承自 RuntimeException,如下所示: https://docs.oracle.com/javase/7/docs/api/java/lang/IllegalArgumentException.html 。这意味着您的 catch block catch (RuntimeException ex) 将捕获抛出的异常。因此,将会执行 RuntimeException catch block (retry = true;) 中的代码,然后从 try-catch block 之后继续执行。由于这仍在外部 do-while 循环内,因此循环将继续。

关于java - 嵌套 do while 循环的 Junit 测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61476765/

相关文章:

Java 线程池执行器

node.js - 如何在 NodeJS 中模拟流

java - 如何模拟调用集合方法并且该集合没有setter的方法?

java - 捕获错误消息并显示在控制台(IDE)中

java - 如何从 Facebook 业务管理器激活自动 Whatsapp 模板?

java - java中泛型函数的多重扩展

spring - 如何在 Spring Boot 和 Spring WebFlux 中使用 "Functional bean definition Kotlin DSL"?

java - CXF 使用 JSON 调用 REST 服务

java - Spring 安全 : Show warning before overwriting session

unit-testing - 如何在 Grails 单元测试中模拟 Java 类?