我正在努力在这个程序上实现测试用例。该程序接收一个队列并按升序对其进行排序。它工作正常。但是,当我尝试使用 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;
}
}
答案 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());
}