我有一个带有main()
方法的程序,该程序在运行的两个不同时间要求用户输入一行。然后,它接受这两行输入,并以特定方式比较它们。
我有一个初始化6个字符串(string1, string2,...,string6
)的JUnit测试类,当程序提示用户这样做时,我不知道如何通过将它们发送到System.in
来获取这些字符串并模拟用户输入。
本质上,在该程序的第一次运行时,该程序会说:“请输入您的第一个字符串”,然后在以后会说:“请输入您的第二个字符串”。在这两个提示下,我想分别从测试类中输入string1
和string2
。然后,在程序的第二次运行中,我想输入string3
和string4
有没有办法做到这一点?我尽力使这一点易于理解,但是我知道我是否正在努力阐明自己的观点。让我知道您是否不了解任何内容,我们将尽力澄清任何模糊的细节。
最佳答案
您应该重构代码,并将执行计算的部分与从控制台获取输入的部分分开。然后,通过传递必要的输入作为参数,可以非常轻松地为执行计算的零件编写测试。与控制台配合使用的部分通常非常简单,不需要测试。
无需重构代码即可进行测试。您需要用PipedInputStream和PipedOutputStream对替换System.in和System.out。然后,您需要启动一个线程,该线程将从连接到System.out的PipedInputStream读取数据,并在看到输入提示时,将期望的输入写入连接到System.in的PipedOutputStream。