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