我正在使用maven运行单元测试。有一次,我需要暂停执行,以便测试人员做一些事情。完成后,他们需要按一个键。我的单元测试中有以下代码。
try {
while (true) {
System.out.print("Enter something : ");
inputResult = System.console().readLine();
}
} catch (Exception exc) {
// exception handling code to
// print out message and stack trace
}
运行此代码时,会捕获一个异常,该异常具有通向该行的堆栈跟踪:
inputResult = System.console().readLine();
为什么会这样?我怎么解决呢?
答案 0 :(得分:0)
您将 UnitTest 与 JUnit框架执行的测试混合在一起。
根据定义, UnitTest 是一些额外的代码,可以自动验证生产代码的行为,这尤其意味着无需用户交互
您有三种选择(按需要的顺序):
将此测试排除在maven构建期间执行的测试中。 您可以通过配置maven-surefire-plugin
也可以自动化用户交互。
改善您的单位测试 通过不分离被测单元,您的测试可能会失去 UnitTest 的特性。
如果您因此应用关注点分离原则,则用户交互在不同的单元(类/模块)中完成,在单元测试运行期间您应该用模拟替换。这些模拟最好是在Mockito,JMock等模拟框架的支持下创建的。
我自己会建议#3。