我想创建一个JUnit测试类来测试一个非常简单的方法。
public static String whatsYourName() {
System.out.println("Input your name:");
yourName = in.next();
return yourName;
}.
我的问题被认为是如何测试如上所述的简单方法。 我认为以下解决方案是完美的!
答案 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。