JUniting简单的用户输入?

时间:2014-01-04 11:40:41

标签: java junit

我想创建一个JUnit测试类来测试一个非常简单的方法。

public static String whatsYourName() {
  System.out.println("Input your name:");
  yourName = in.next(); 
  return yourName;
}.

我的问题被认为是如何测试如上所述的简单方法。 我认为以下解决方案是完美的!

1 个答案:

答案 0 :(得分:2)

我首先要改变方法,将Scanner作为参数(依赖注入原则):

public static String whatsYourName(Scanner in) {
  System.out.println("Input your name:");
  yourName = in.next(); 
  return yourName;
}

然后变得容易测试:

@Test public void testName() {
    Scanner in = new Scanner("my name");
    assertEquals("my name", whatsYourName(in));
}

现在只测试你的方法从扫描器中提取正确的信息,它不会测试用户是否可以实际输入内容 - 但这将是集成测试的一部分,而不是单元测试。

另请注意,您的方法基本上等同于return in.next();,因此您实际上正在测试next的{​​{1}}方法,这是不必要的。但如果该方法更复杂,则该原则将适用。

一篇非常有趣的文章:Google guide on Writing Testable Code