« 【痛快TV】スカッとジャパン2時間SPの小日向文世 | トップページ | ココナラのCMの人ってグレチキ北原? »

2020年8月 1日 (土)

【mockito/JMockit】ネスト&staticメソッドテスト

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

1. ネストメソッド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)

2. 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);

3. Propertiesのテスト(staticメソッドmock化)
----------------------------------------------------------------------
@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

|

« 【痛快TV】スカッとジャパン2時間SPの小日向文世 | トップページ | ココナラのCMの人ってグレチキ北原? »

仕事」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« 【痛快TV】スカッとジャパン2時間SPの小日向文世 | トップページ | ココナラのCMの人ってグレチキ北原? »