1

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 オブジェクトを構築することができます。しかし、スタックオーバーフロー例外が発生します。なんで?再帰的に呼び出されたコンストラクターは、コンストラクターを呼び出す前にルート オブジェクトに渡されるようになったためです。

要するに、ここで必要なのは、「whenNew(JSONObject.class, times(1))」などと言いたいということです。そのため、最初のコンストラクター呼び出しのみがモックされ、以降はモックされなくなります。これは可能だと思いましたが、これを達成する方法が見つかりません:(

助けてくれてありがとう、みんな!

4

1 に答える 1