我想系统。在多行文本中,因为我使用了.nextLine()方法。我会在每次调用.nextLine()后复制粘贴前3行,但我不想每次都返回到我的JUnit。可以吗?
//JUnit code
String input = "GME to the MOOON";
InputStream insert = new ByteArrayInputStream(input.getBytes());
System.setIn(insert);
//Method called in test method
Scanner scannerObj = new Scanner(System.in);
String myString = scannerObj.nextLine();
4条答案
按热度按时间r6hnlfcb1#
下面是一个简单的例子。在
add()
方法中,你可以委托一个简单的工厂方法来代替Scanner = new Scanner(System.in));
,这个工厂方法可以在测试中被覆盖。类似地,输出端抽象出System.out
:hfyxw5xn2#
首先,您需要确定您要测试的是什么。
您是在测试使用输入字符串的任何逻辑,还是在测试提示用户输入该字符串的逻辑。
如果您回答“两者都有”,那么请注意,这是两个不同的责任领域,应该分别进行测试,因此如果一个失败,不会影响另一个的测试状态。
这样,您现在就可以unit分别测试这两个逻辑了。
这被称为Separation-of-Concerns(SoC)。
main
方法未进行单元测试。xtfmy6hx3#
您可以使用System Lambda进行测试:
免责声明:我是系统Lambda的作者。
oogrdqng4#
我发现了一个简单的方法:
1.添加功能代码
1.添加测试代码