残念ながら、Mockitoのドキュメントには網羅的な情報がないため、以下の設定を作成する方法を見つけるのが難しいです。Mockito:テスト中のクラスから呼び出されたクラスのメソッドを置き換える方法は?
私はクラス "ResourceManager"をテストする必要があります。このクラスは、 "get"というメソッドを持つ別のクラス "JerseyClient"をインスタンス化します。私は "ResourceManager" にが本当の "JerseyClient"を呼び出さないようにしたいのですが、そこからモック(またはスタブ?)を呼び出すようにしてください(モックイトの文脈では、モックとスタブ、モックとスパイの違いは何ですか? (?または@Spy)
私の試みは@MockにJerseyClientある、またはそれの少なくとも一つの方法:あなたが見ることができるように
@RunWith(MockitoJUnitRunner.class)
public class ResourceManagerTest
{
@Mock
private JerseyClient jerseyClient;
@Test
public void testResultHandling() throws JsonGenerationException, JsonMappingException, IOException, ResourceException
{
TestEntity testEntity = new TestEntity();
ResourceManager resourceManager = new ResourceManager();
testEntity.setGet(true);
testEntity.setTestAttribute("1stTest");
when(jerseyClient.get(anyString())).thenReturn("{\"get\":true,\"testAttribute\":\"2ndTest\",\"message\":\"success\"}");
// doReturn("{\"get\":true,\"testAttribute\":\"2ndTest\",\"message\":\"success\"}").when(jerseyClient).get(anyString());
TestEntity result = (TestEntity)resourceManager.execute(testEntity, TestEntity.class);
assertThat(result, is(notNullValue()));
assertThat(result.getMessage(), is("success"));
assertThat(result.getTestAttribute(), is("2ndTest"));
}
}
、私は返すようにjerseyClient.get()メソッドを模擬してみました事前に定義されたJSON文字列:
when(jerseyClient.get(anyString())).thenReturn("{\"get\":true,\"testAttribute\":\"2ndTest\",\"message\":\"success\"}");
または
doReturn("{\"get\":true,\"testAttribute\":\"2ndTest\",\"message\":\"success\"}").when(jerseyClient).get(anyString());
しかし、それらのどれも動作しません。つまり、実際のJerseyClient.getメソッドが呼び出されるのは、実際のJerseyClientでHTTP要求を行うためです。
解決策とは何ですか、私はここで何をしたいのですか?それは実際のオブジェクトを盗んでいるか、私がそのメソッドを模擬したいオブジェクトを嘲笑しているのですか?また、メソッドを置き換えることはできますか?