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

问题描述 投票:0回答:1

这里是代码的骨架:

    flag1=True
    flag2=True
    do {

        try {

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

                if () {


                } 
               else {

                }
                .
                . 
                .
                if () {
                }

            } while (flag2);

            flag1 = false;

        } catch (RuntimeException ex) {

            retry = true;
        } catch (Exception ex) {

            flag1 = true;


        } catch (Error ex) {

            flag1= true;
        }
        }

    } while (flag1);
}

我正在使用junit4进行测试。我还需要涵盖所有的try catch块以进行测试。我编写了一个满足第一个if条件的测试用例,因此引发了非法参数异常,但是在引发异常之后,代码移至do循环,并且flag1始终为true。

java spring unit-testing testing junit4
1个回答
0
投票

开始时,听起来您可能是Java初学者。如果是这样,我建议您阅读一下Java中的异常处理。我认为这将使您更容易理解此行为的原因。这是Oracle上有关该主题的一些快速教程:https://docs.oracle.com/javase/tutorial/essential/exceptions/

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

1。未将flag1设置为true的原因是,当抛出IllegalArgumentException时,将抛出该位置到异常捕获块之间的所有代码。这包括跳过flag1 = false;行。

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

© www.soinside.com 2019 - 2024. All rights reserved.