测试java程序是否调用系统。存在而不退出Junit
我正在尝试用Junit测试一个文件处理程序。在某些情况下,程序应打印错误并完成运行。但是,使用“System.exit(-1)”会导致程序退出整个Junit测试。 有什么办法可以避免吗
我可以改为打印错误,然后return null
,但是我发现它很不雅观
private List<String> parseData(String[] args){
if (args.length != 2){
System.err.println(ERROR + INPUT_ERROR + "\n");
System.exit(EXIT_CODE);
有没有办法在不关闭程序的情况下检查程序是否名为“System.exit”? 多谢各位
# 1 楼答案
我认为使用这个系统更不雅观。退出以验证输入参数。 为什么不抛出一个异常并让这个方法的调用方处理它呢
# 2 楼答案
虽然我认为AdrianM的解决方案是理想的,但你也可以通过模仿来解决这个问题
选项一:使用一个模拟框架,比如PowerMock,它允许你模拟静态方法,这样你就可以让
System.exit
什么都不做选项二:使用依赖注入和任何模拟框架。创建此接口并实现类:
然后,使包含
parseData
的类将SystemExit
作为构造函数参数,并将其存储在成员变量中(或者为成员变量设置一个setter,让您在构造后对其进行设置)。在生产代码中,传递一个SystemExitImpl
。在测试中,为SystemExit
创建一个模拟,并通过它