【Java】JUnit、ObjectMapper をモック化して例外を発生させる
ObjectMapperをJUnit でテストする際に、例外 (JsonProcessingException / IOException等) をモックで発生させたい場合は、ObjectMapper をモック化して例外をスローさせるようにすればできます
以下に Mockito を使った実装例を紹介します
(writeValueAsStringを例で実装紹介します)
■ テスト対象クラス
import com.fasterxml.jackson.databind.ObjectMapper;
public class MyService {
private final ObjectMapper objectMapper;
public MyService(ObjectMapper objectMapper) {
this.objectMapper = objectMapper;
}
public String convertToJson(Object obj) {
try {
return objectMapper.writeValueAsString(obj);
} catch (Exception e) {
throw new RuntimeException("JSON変換失敗", e);
}
}
}
■ JUnitテストクラス
例外をモックでスローします
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
public class MyServiceTest {
@Test
void testWriteValueAsStringThrowsException() throws JsonProcessingException {
// Arrange
ObjectMapper mockObjectMapper = mock(ObjectMapper.class);
MyService service = new MyService(mockObjectMapper);
Object input = new Object();
// JsonProcessingException をスローするよう設定
when(mockObjectMapper.writeValueAsString(input))
.thenThrow(new JsonProcessingException("Mocked Exception") {});
// Act & Assert
RuntimeException exception = assertThrows(RuntimeException.class, () -> {
service.convertToJson(input);
});
assertTrue(exception.getMessage().contains("JSON変換失敗"));
}
}
【Spring Boot版】
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
@SpringBootTest
class MyServiceTest {
@Autowired
private MyService myService;
@MockBean
private ObjectMapper objectMapper;
@Test
void testWriteValueAsStringThrowsException() throws JsonProcessingException {
// Arrange
Object input = new Object();
// JsonProcessingException をモックでスロー
when(objectMapper.writeValueAsString(input))
.thenThrow(new JsonProcessingException("モック例外") {});
// Act & Assert
RuntimeException thrown = assertThrows(RuntimeException.class, () -> {
myService.convertToJson(input);
});
assertTrue(thrown.getMessage().contains("JSON変換失敗"));
}
}
是非ご参考ください

是非フォローしてください
最新の情報をお伝えします