【Mockito/JMokit】ネスト&staticメソッドテスト

Mocked、Injectableを使い分け。バージョンによっては使えたり使えなかったり。

ネストメソッド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
仕事
drg75 / ヒデ★をフォローする
☆NIGHTS☆

コメント

タイトルとURLをコピーしました