我即将建立一个 JSON 对象并想测试结果。我正在调用公共方法。有几个私有方法并进行了递归调用。一开始我有这个:
JSONObject obj = new JSONObject();
这是我的“根”对象。不幸的是,它不是作为参数等给出的,而是使用构造函数创建的,如图所示。在 recursvie 调用中,此构造函数被多次调用以构建结构。我需要的是测试中断言的根对象。
所以我试图以某种方式得到它并在这里尝试这种方法......以下代码:
JSONObject json = new JSONObject();
PowerMockito.whenNew(JSONObject.class).withNoArguments().thenReturn(json);
[...]
assertThat(json.get("bla"), is("hello")); // assertions possible to my root json object
这将允许我在执行我的断言后拥有构建的根 json 对象。但是我遇到了 stackoverflow 异常。为什么?因为递归调用的构造函数现在通过我的根对象调用构造函数。
所以底线,我在这里需要什么:我想说“whenNew(JSONObject.class,times(1))”或类似的东西。这样只有第一个构造函数调用被嘲笑,而以下不再被嘲笑。我认为这应该是可能的,但找不到实现这一目标的方法:(
感谢您的帮助,伙计们!