gpt4 book ai didi

java - 使用 Scanner 对用户输入进行 junit 测试

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:31:00 27 4
gpt4 key购买 nike

我必须测试一个类中的方法,该方法使用 Scanner 类接受输入。

package com.math.calculator;

import java.util.Scanner;

public class InputOutput {

public String getInput() {
Scanner sc = new Scanner(System.in);
return sc.nextLine();
}
}

我想使用 JUnit 对其进行测试,但不确定如何进行。

我尝试使用以下代码,但它不会工作。

package com.math.calculator;

import org.junit.Test;

import static org.junit.Assert.assertEquals;

public class InputOutputTest {

@Test
public void shouldTakeUserInput() {
InputOutput inputOutput= new InputOutput();

assertEquals("add 5", inputOutput.getInput());
}
}

我也想用 Mockito 尝试一下(使用 mock...when...thenReturn)但不知道该怎么做。

最佳答案

您可以使用 System.setIn() 方法更改 System.in 流。

试试这个,

@Test
public void shouldTakeUserInput() {
InputOutput inputOutput= new InputOutput();

String input = "add 5";
InputStream in = new ByteArrayInputStream(input.getBytes());
System.setIn(in);

assertEquals("add 5", inputOutput.getInput());
}

您刚刚修改了 System.in 字段。 System.in 基本上是一个 InputStream,它从 console 读取(因此您在控制台中输入)。但是您只是修改了它,让系统改为从提供的 inputstream 中读取。所以它不再从控制台读取,而是从提供的输入流读取。

关于java - 使用 Scanner 对用户输入进行 junit 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31635698/

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