java - JUnit 使用 Mockito 测试用户输入

标签 java unit-testing junit mockito

我在使用模拟框架 Mockito 时遇到问题。我想测试用户在控制台中键入的输入。如果没有 Mocking,它工作得很好,但有了它,我不知道如何从函数中获取返回值,该函数获取控制台中的输入。

没有 Mockito:

读取输入法

public int readUserInput() {
    BufferedReader console = new BufferedReader(new InputStreamReader(
            System.in));
    return Integer.parseInt(console.readLine());
    ...
}

测试方法:

public class TestClass {
    Controller contr = new Controller();
    @Test
    public void testUserInput() {
        System.setIn(new ByteArrayInputStream("1".getBytes()));
        assertEquals(1, contr.readUserInput());
        System.setIn(System.in);
    }
}

但是现在如何使用 Mockito 编写测试。我尝试了几种方法,但没有一个有效。我一直得到 0,而不是我在 ByteArrayInputStream 中写入的数字。

提前致谢!

最佳答案

您需要模拟 BufferedReaderreadLine() API 来返回您的值。 即

 Mockito.when(mockedBufferedReader.readLine())
                .thenReturn("1");

现在,当您从测试中调用 readInput() 时,将调用您的模拟缓冲读取器的 API。希望这能回答您的问题。

关于java - JUnit 使用 Mockito 测试用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27105951/

相关文章:

java - Junit 异常初始化错误

java - 设置 MockServletContext 的真实路径

java - ZK 主题和 IE 行为 (.htc) 内容类型的问题

java - 将 Java 中的路径排序为层次结构

java - 移相器同步用法

java - 如何使用junit模拟调用单例类的类

unit-testing - 使用 Mockito 模拟挂起函数返回 null

node.js - 使用 mocha 递归测试

java - CriteriaBuilder 查询在两列之间使用 Like

java - EasyMock Controller 映射和状态代码测试