如何处理空队列参数并在 JUnit 5 中对其进行测试

时间:2021-03-08 09:22:04

标签: java error-handling junit5 testcase

我目前正在研究这个程序,该方法将队列作为参数。然后它按升序对队列进行排序并返回它。它工作正常,但我不知道如何处理空队列。我试图打印出“无效输入”,但测试类显示错误。即使没有传递空队列,“无效输入”代码块也会继续执行。所以没有一个测试通过。我真的需要你的帮助!

排序代码:

realm

测试类:

import java.util.Queue;

public class Sort {

    public static Queue<Integer> queueSort(Queue<Integer> queue) { 
                                                            
        int n = queue.size(); 

        if (queue.isEmpty()) {      
            System.out.println("Invalid Input");

        } else {

            for (int i = 0; i < n; i++) {  

                int minimumIndex = -1;
                int minimumValue = Integer.MAX_VALUE; 
                                                      

                for (int j = 0; j < n; j++) {        
                    int currentValue = queue.poll();

                    if (currentValue < minimumValue && j < (n - i)) {  
                        minimumValue = currentValue;                  
                        minimumIndex = j;            
                    }                                
                    queue.add(currentValue);        
                }

                for (int j = 0; j < n; j++) {     
                    int currentValue = queue.poll();

                    if (j != minimumIndex) {
                        queue.add(currentValue);
                    }
                }

                queue.add(minimumValue);      
            }

        }
        return queue;
    }
}

2 个答案:

答案 0 :(得分:0)

断言正在检查返回的值。如果队列为空,您将打印 "Invalid Input" 不返回此

if (queue.isEmpty()) {      
    System.out.println("Invalid Input");
}

本例中返回值为空队列,不等于string "Invalid Input"

因此,如果有这样的要求(例如抛出异常),您需要更改您的业务逻辑 - 当然不要更改您的逻辑以满足测试! :)

另一种方式是测试输出,例如JUnit test for System.out.println()

答案 1 :(得分:0)

如果你想断言一个 System.out,你应该拦截它。

举个例子:

@Test
void queueSort() {
    final PrintStream standardOut = System.out;
    final ByteArrayOutputStream outputStreamCaptor = new ByteArrayOutputStream();
    System.setOut(new PrintStream(outputStreamCaptor));
    Sort.queueSort(Q3)
    Assertions.assertEquals("Invalid Input", outputStreamCaptor.toString().trim());
}

在 Baeldung 上有一个很好的 article