0

操作の一部として次のことを行うメソッドがあります。

URL resourceUrl = new File(sampleString1.concat("/")
                .concat(sampleString2)).toURI().toURL();

SampleString1とSampleString2は、クラスのコンストラクターによって設定され、クラスは抽象クラスです。このクラスをテストするために、以下の行を使用しました。

servlet = PowerMockito.mock(MyServlet.class, Mockito.CALLS_REAL_METHODS);

これにより、属性sampleString1とsampleString2の値をコンストラクターに渡していないため、それらを設定できません。ここで、サーブレットでテストメソッドを呼び出すと、sampleString1とsampleString2の値がnullであるため、上記の行でNullPointerExceptionsが発生します。私は次の方法でその部分をシミュレートしようとしました:

 PowerMockito.whenNew(File.class).withParameterTypes(String.class).
                     withArguments(Matchers.anyString()).thenReturn(sampleFile);

ただし、新しいファイルの呼び出しが行われ、例外がスローされると、文字列の連結が実行されます。この方法をテストするにはどうすればよいですか?新しいファイル操作が呼び出されたときにresourceUrlのサンプル値を返し、メソッドのロジックを続行して出力をテストしたいだけです。

ありがとう。

4

1 に答える 1

1

次の場所に文書化されている Whitebox API を使用できます。

リフレクションを使用して、次のようにオブジェクトに値を設定します。

MyServlet servlet = PowerMockito.mock(MyServlet.class, Mockito.CALLS_REAL_METHODS);
Whitebox.setInternalState(servlet, "sampleString1", "foo");
Whitebox.setInternalState(servlet, "sampleString2", "bar");
//Test code...
于 2012-07-06T17:27:58.637 に答える