gpt4 book ai didi

java - 使用mockito模拟控制台

转载 作者:行者123 更新时间:2023-12-02 03:25:41 25 4
gpt4 key购买 nike

我正在使用 printBooks 操作类打印图书馆中的书籍列表。我想看看是否将正确的输出写入控制台。这是我到目前为止所尝试过的。有人可以解释一下我在这里做错了什么吗?提前致谢。

PrintBooksOperation.java

package tw51.biblioteca.io.menu;

import tw51.biblioteca.Lendable;
import tw51.biblioteca.Library;
import tw51.biblioteca.io.Input;
import tw51.biblioteca.io.Output;
import tw51.biblioteca.io.menu.home.MenuOptions;

import java.util.List;

import static tw51.biblioteca.ItemType.Book;

/**
* Prints the Items Of Type Book.
*/

public class PrintBooksOperation implements MenuOptions {

private Library library;
private Output writer;

@Override
public void execute(Library library, Input reader, Output writer) {
this.library = library;
this.writer = writer;
printBooks();
}

private void printBooks() {
writer.formattedHeadings();
writer.write("\n");
List<Lendable> items = library.listItems();
items.stream().filter(item -> item.isOfType(Book)).forEach(item -> {
writer.write("\n" + item.toFormattedString());
});
}
}

PrintBooksOperationTest.java

    package tw51.biblioteca.io.menu;

import org.junit.Test;
import tw51.biblioteca.Book;
import tw51.biblioteca.Library;
import tw51.biblioteca.io.Input;
import tw51.biblioteca.io.Output;

import java.util.Arrays;
import java.util.LinkedList;

import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;

/**
*
*/
public class PrintBooksOperationTest {

@Test
public void areTheBooksPrintedCorrectly() {
Input reader = mock(Input.class);
Output writer = mock(Output.class);
Book book = new Book("nin", "#123", "ghy", 2003);
Library library = new Library(new LinkedList<>(Arrays.asList(book)));
PrintBooksOperation print = new PrintBooksOperation();
print.execute(library, reader, writer);
verify(writer).write("");
}
}

Input和Output是实现控制台读写的接口(interface)。

我的错误消息:

Argument(s) are different! Wanted:
output.write(
""
);
-> at tw51.biblioteca.io.menu.PrintBooksOperationTest.areTheBooksPrintedCorrectly(PrintBooksOperationTest.java:28)
Actual invocation has different arguments:
output.write(
"
"
);

为什么实际参数为空?当我运行 Print 操作时,它会起作用。我做错了什么吗?或者还有其他方法来测试控制台吗?

最佳答案

当您在编写器实例上调用 verify 时,您表示应使用参数“”首次调用它。

从你的实现中,无论你多次写入它

private void printBooks() {
writer.formattedHeadings();
writer.write("\n"); // <-- This is the first time
List<Lendable> items = library.listItems();
items.stream().filter(item -> item.isOfType(Book)).forEach(item -> {
writer.write("\n" + item.toFormattedString());
});
}

请注意,第一次调用 write 参数实际上是 "\n" 这是一个换行符,这与空字符串不匹配,测试失败。要么更改测试以检查“\n”,要么更改方法以打印您期望的内容。

关于java - 使用mockito模拟控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38939195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com