gpt4 book ai didi

java - 测试 junit 时忽略扫描仪输入

转载 作者:行者123 更新时间:2023-11-30 10:16:55 26 4
gpt4 key购买 nike

如何在测试以下方法时忽略 sysout 语句?

public int inputBoardSize() {
System.out.print("Enter the number of grids you want to play with:");
while (flag) {
try {
boardSize = validateBoardSize(Integer.parseInt(scan.nextLine()));
} catch (NumberFormatException e) {
System.err.println("Please enter a number");
}
}
printBoard(boardSize);
return boardSize;
}

所以当我测试这个方法时,我得到一个提示,要求我输入网格数。我该如何解决这个问题?

最佳答案

您需要模拟 资源。因此创建一个包装界面,如

public interface LineProvider {
String nextLine();
}

和实现类,首先是您将在实际程序中使用的类:

public class UserInput implements LineProvider {
private Scanner mScanner;

public UserInput(Scanner scanner) {
mScanner = scanner;
}

@Override
public String nextLine() {
return mScanner.nextLine();
}
}

然后是您将用于测试的模拟:

public class UserInputMock implements LineProvider {
private String mLineToReturn;

public UserInputMock(String initialLine) {
mLineToReturn = initialLine;
}

public void setLineToReturn(String lineToReturn) {
mLineToReturn = lineToReturn;
}

@Override
public String nextLine() {
return mLineToReturn;
}
}

现在让您的方法接受资源作为参数:

public int inputBoardSize(LineProvider provider) {
...
boardSize = validateBoardSize(Integer.parseInt(provider.nextLine()));
...
}

在你的主程序中你使用了一个UserInput

UserInput userInput = new UserInput(scan);
...
inputBoardSize(userInput);

而在您的测试中您使用模拟:

UserInputMock mock = new UserInputMock("hello world");
inputBoardSize(mock); // Not valid

mock.setLineToReturn("5");
inputBoardSize(mock); // Valid

请注意,有一些框架可以让这些事情变得更容易。

关于java - 测试 junit 时忽略扫描仪输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49843894/

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