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

2024-03-24

我必须测试类中的一个方法,该方法使用 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.in流式使用System.setIn() method.

尝试这个,

@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 field. System.in基本上是一个InputStream其读取自console(因此您在控制台中的输入)。但你只是修改了它并让系统从提供的读取inputstream反而。因此它不再从控制台读取,而是从提供的输入流读取。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Scanner 对用户输入进行 junit 测试 的相关文章

随机推荐