Mockitoに初めて触れました。
絶対に忘れるので少しだけメモ。
各テストの処理前に実行してくれる便利。
事前に必ず実行したい共通の処理があるときに書く。
@BeforeEach
public void setUp() throws Exception {
Mockito.when(response.getWriter()).thenReturn(responseWriter);
}
##@BeforeEachのモック処理を解除
1テストケースだけBefore処理をスキップしたいとき
Mockito.reset(response.getWriter());
##今回使用した形式
これが一般的なのかはわからないけれどメモ。
MockedConstruction<Client> mockedConstruction =
Mockito.mockConstruction(Client.class, (mock, context) -> {
client = mock;
Mockito.when(client.メソッド(any(),eq(Response.class))).thenReturn(Response);
Stringやbooleanには**「eq()」**をつける。
上記の例Clientクラスは対象のクラスの1つ奥の処理のクラスを当てはめるとうまくいった(仕組みがまだよくわかってない)。
ちなみにstaticメソッドの場合は別の書き方がある。
最近Mockitoで出来るようになったらしい。
##JUnitでPrivateメソッドのテストをしたいとき
Mockito関係ないけどお世話になった記事。
https://qiita.com/village/items/2f0d99b25eef0c8fd4ec
例外処理で引っかかったのでメモ。
@Test
@DisplayName("Check List ID :1")
public void checkListID1() throws Exception {
testTarget = new Service(request);
Method system = Service.class.getDeclaredMethod("executeMethod");
system.setAccessible(true);
try {
system.invoke(testTarget);
} catch (Exception e) {
assertEquals("0000", result);
assertThrows(BusinessException.class, () -> {
throw e.getCause();
});
}
}
privateメソッド使うときはtry-catch
にしてe.getCause
しないとinvokeのエラーになるので注意!