java - 如何对需要键盘输入的方法进行单元测试?
问题描述
所以我正在编写一个静态方法,它返回你输入的所有成绩的平均值。下面是代码:
public static float average() throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
float sum=0;
System.out.print("Number of classes: ");
int classes = Integer.parseInt(reader.readLine());
for (int i = 0; i < classes; i++) {
System.out.print("input the grade: ");
float grade = Integer.parseInt(reader.readLine());
sum += grade;
}
float average = sum / classes;
return average;
}
我想在 Junit 中执行测试以确保这段代码是可靠的(这里的重点是了解 JUNIT,我知道代码本身并没有什么特别的)。
问题:这种方法要求我通过键盘输入值才能返回一些东西。我不知道如何更改输入流以在我的 junit 测试中采用特定值。你会建议我如何去做,或者你会建议我研究什么?
解决方案
将 BufferedReader 从您的方法中取出,例如将您的方法的签名更改为
public static float average(BufferedReader reader) throws IOException {}
并在您的单元测试中为该方法提供一个阅读器,该阅读器从文件或您放置所需输入值的字符串中读取。
推荐阅读
- c# - 在 WinDbg 扩展中调用 IDbgConsole.PrintTextToConsole 时出现异常
- r - 合并两个 tbl_regression 表时不合并列
- laravel - 安装 Laravel 时出错:[ErrorException] file_get_contents(): read of 8192 bytes failed
- python - 如何在 PyCharm 中使用帮助文件
- javascript - 如何将菜单标记移出标题并将其插入 HTML 中的另一个位置?
- python - 运行大型计算时python中的内存管理
- azure-devops - Azure DevOps 中的质量门小部件问题
- java - 分享图片到 Snapchat
- mysql - Mysql SQL查询排除特定记录
- active-directory - 小型办公室的广告