首页 > 解决方案 > 如何模拟构造函数一个静态公共类以引发异常

问题描述

我正在学习 mockito 和 power mockito,如果这个问题很愚蠢,请原谅我。

我试图模拟以下行以引发一些异常:

new ResultJSONWrapper.Success(null).toJSON();

我想我需要一些如何模拟成功类的构造函数来抛出 JSONException 但找不到任何可靠的解决方案。有人可以给我一些提示吗?

public abstract class ResultJSONWrapper {
    private String json;
    public String toJSON() {
        return json;
    }

    static public class Success extends ResultJSONWrapper {
        public Success(Object result) throws JSONException {
            JSONWriter writer = new JSONStringer();
            writer.object();
            writer.key("status");
            writer.value(HTTP_OK);
            writer.key("data");
            writer.value(result);
            writer.endObject();
            super.json = writer.toString();
        }
    }
}

标签: javamockito

解决方案


Mockito 不允许您模拟构造函数,Power Mockito 是您应该使用的最后一件事。

由于ResultJSONWrapper是一个abstract类,您可以只创建将在创建期间TestResultJSONWrapper抛出的实现,并将JSONException传递到您正在测试的代码部分

public class TestSuccessMock extends ResultJSONWrapper {
    public TestSuccessMock (Object result) throws JSONException {
        throw new JSONException();
    }
}

所以基本上我的建议是不要为此目的使用 Mockito


推荐阅读