有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

测试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”? 多谢各位


共 (2) 个答案

  1. # 1 楼答案

    我认为使用这个系统更不雅观。退出以验证输入参数。 为什么不抛出一个异常并让这个方法的调用方处理它呢

  2. # 2 楼答案

    虽然我认为AdrianM的解决方案是理想的,但你也可以通过模仿来解决这个问题

    选项一:使用一个模拟框架,比如PowerMock,它允许你模拟静态方法,这样你就可以让System.exit什么都不做

    选项二:使用依赖注入和任何模拟框架。创建此接口并实现类:

    public interface SystemExit {
        void exit(int code);
    }
    
    public class SystemExitImpl implements SystemExit {
        public void exit(int code) {
            System.exit(code);
        }
    }
    

    然后,使包含parseData的类将SystemExit作为构造函数参数,并将其存储在成员变量中(或者为成员变量设置一个setter,让您在构造后对其进行设置)。在生产代码中,传递一个SystemExitImpl。在测试中,为SystemExit创建一个模拟,并通过它