如何在JUnit测试中模拟用户输入?

时间:2017-10-27 16:38:18

标签: java testing junit

我有以下代码要测试:

public IGrid createIGrid() {
    while(size < 0){
        userInput();
    }
    GridArray gamefield= new GridArray(size);
    return gamefield;
}

public void userInput(){
    System.out.println("Bitte geben Sie die größe des Grid an. Der Wert muss größer als 0 sein.");
    int size = scanner.nextInt();
    if (size < 1) {
        throw new ImpossibleValueForArrayException();
    }
}

现在我想测试一下。我该怎么办?

2 个答案:

答案 0 :(得分:0)

你可以模拟一个函数的调用。

public class Core {
    private static HandleInput handleInput = new HandleInput();
    public static void main(String[] args)  {   
        handleInput.getConsoleInt();
    }

    @Test
    public void test()  {
        handleInput.handleInput(74);  // your testing number
    }
}

对于输入处理程序:

class HandleInput {
    Scanner scanner = new Scanner(System.in);
    public int getConsoleInt()  {
        return  scanner.nextInt();          
    }
    public void handleInput(int input)  {
        if (input < 1) {
            throw new ImpossibleValueForArrayException();
        }
    }
}

但你可以用Robot.class来做...但那非常昂贵......

答案 1 :(得分:0)

将Mockito框架与JUnit结合使用,因此您可以模拟scanner.nextInt()并定义要返回的预期值。 如果您不熟悉Mockito,我建议您阅读这篇文章http://www.vogella.com/tutorials/Mockito/article.html