gpt4 book ai didi

java - 为 JUnit 测试提供输入

转载 作者:行者123 更新时间:2023-11-28 21:28:23 27 4
gpt4 key购买 nike

嗨,这是我第一次使用 eclipse 在 java 中尝试单元测试。

所以当我测试我的类(class)时,它需要用户输入。让我们说一个名为“add hello”的命令,这样它将创建一个新的文本文件并向其中添加单词“hello”。然后我想测试一个名为 getAllLines 的函数,它返回“hello”并将其与断言进行比较。

我的主要问题是如何通过 junit 测试模拟用户对控制台的输入。这是我尝试过的方法,但它不起作用..

private void performUserInput(String strInput){
ByteArrayInputStream in = new ByteArrayInputStream(strInput.getBytes());
System.setIn(in);
}

private void releaseUserInputToSystem(){
System.setIn(System.in);;
}

@Test
public void testSearchingInEmptyFile() {

TextBuddy textBuddy = new TextBuddy("file.txt");

textBuddy.run();
performUserInput("add little brown fox");
releaseUserInputToSystem();

assertEquals("little brown foxx", "asd");
}

在我看来,代码永远不会到达断言。

编辑--------------------------------------------调试后卡在这里

private String[] getCommandAndArgs(){
String[] splitCommand = scanner.nextLine().split(" "); //<<STUCK HERE
printNewLine();
return splitCommand;
}

最佳答案

通过单元测试,您应该测试 TextBuddy 类的单个方法(单元)。你可能有一个检查命令的方法(添加、删除,无论你有什么)。为那些编写单元测试,例如:

@Test
public void testCommandAdd() {
TextBuddy tb = new TextBuddy ();
int command tb.parseCommand("add hello");
assertThat(command,is(TextBuddy.ADD));
}
@Test
public void testCommandRemove() {
TextBuddy tb = new TextBuddy ();
int command tb.parseCommand("remove hello");
assertThat(command,is(TextBuddy.REMOVE));
}

然后为每个命令编写测试,例如一个文件被写入/删除了:

@Test
public void testWriteFile() throws SQLException {
TextBuddy tb = new TextBuddy ();
tb.writeFile("file.txt", "hello");
File f = new File("file.txt");
String content = readFile(f);
assertThat(content,is("hello"));
}

始终使用小型单元测试来测试程序的单个单元。稍后您可以编写更大的测试来检查您的漏洞程序是否有效。

如果您不想使用 public 修饰符公开您的方法,您仍然可以测试它们 - 最简单的方法是将它们设为包私有(private)并让您的测试使用相同的包(它们可以而且应该在不同的 src 中-文件夹)例如对于一个包 com.yourpackage 这样的类

src/com/yourpackage/YourClass.java

您可以将测试存储在

test/com/yourpackage/YourClassTest.java

然后你就可以访问包私有(private)的方法了。

或者您使用反射来访问和测试私有(private)方法,请参阅 herehere

关于java - 为 JUnit 测试提供输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32567501/

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