ネストメソッドmock化
RestAPIのテスト。
Client client = mock(Client.class, RETURNS_DEEP_STUBS);
// Clientをメンバに持つテスト対象クラス
TestTarget target = new TestTarget();
// メンバ変数に入れる
Whitebox.setInternalState(target, "client", client);
when(client.target(anyString()).request().post((Entity<String>)any(), any(Class.class))).thenReturn("");
t.do("url", "json");
// 呼び出し確認
Entity<String> entity = Entity.entity("json", MediaType.APPLICATION_JSON);
verify(client.target("url").request(), times(1)).post(entity, String.class)
staticクラス内で呼び出すネストメソッドmock化
@Mocked
Test test;
---
new Expectation(test) {{
// Expectationの中ではRETURNS_DEEP_STUBSは使わない
t.get((XXX)any).getA().getB().getC();
result = "ok";
}}
java.lang.reflect.Field field = XXX.class.getDeclaredField("test");
field.setAccessible(true);
field.set(null, test);
staticメソッドmock化
Propertiesのテスト。
@Injectable
ResourceBundle resourceBundle;
---
// プロパティファイル切り替え
ResourceBundle p1 = ResourceBundle.getBundle("p1");
ResourceBundle p1 = ResourceBundle.getBundle("p2");
ResourceBundle p1 = ResourceBundle.getBundle("p3"); new Expectation() {{
// テスト対象を呼び出すたびにプロパティファイルを変える
ResourceBundle.getBundle(anyString);
returns(p1, p2, p3);
}}
その他
staticネストメソッドはInjectableを使って2の方法でテスト。
Expectationで動かない場合はNonStrictExpectationで動くかも(この辺はバージョンによって異なる)。以下、格闘したエラー。
・Misplaced argument matcher detected here. You cannot use argument matchers outside of verification or stubbing in Mockito.
・invaliduseofmatchersexception
・ClassCastException
コメント