如何在 JUnit 5 中测试队列?

时间:2021-03-08 06:53:47

标签: java testing junit

我正在努力在这个程序上实现测试用例。该程序接收一个队列并按升序对其进行排序。它工作正常。但是,当我尝试使用 JUnit 5 测试它的返回结果时,出现错误。我将预期结果和实际结果放在测试类的测试方法中。它仍然不起作用。请帮忙!

(编辑:测试方法)

代码如下:

d <- expand.grid(date=seq(as.Date("2000-01-01"), as.Date("2000-09-01"), by="month"),
            grid=LETTERS[1:3])
set.seed(42)
d$temp <- sample(-1:2, nrow(d), replace=T)

测试类:

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 :(得分:1)

您应该使用 org.junit.Assert.assertEquals 进行队列相等性检查。

答案 1 :(得分:0)

如果你想在你的平等检查中考虑顺序,你可以这样做:

Assertions.assertTrue(Arrays.equals(q1.toArray(), queueSort(q1).toArray()));

为了使这段代码更美观,您可以实现自定义匹配器(例如,使用 hamcrest )。

请注意,您的代码正在更改初始队列(看起来像一个错误 :))。

所以

Queue<Integer> sortedq1 = Sort.queueSort(q1);
Assertions.assertTrue(Arrays.equals(q1.toArray(), sortedq1.toArray()));

总是会通过(因为 q1 已经排序了)。这个 post 可以帮助理解原因。

我看到您编辑了问题。所以还要添加 System.out 验证:

@Test
void queueSort() {
    final PrintStream standardOut = System.out;
    final ByteArrayOutputStream outputStreamCaptor = new ByteArrayOutputStream();
    System.setOut(new PrintStream(outputStreamCaptor));
    Queue<Integer> q1 = new LinkedList<>();
    Queue<Integer> sortedq1 = Sort.queueSort(q1);
    Assertions.assertEquals("Invalid Input", outputStreamCaptor.toString().trim());
}