外部APIを呼び出すRepositoryクラスを追加してControllerクラスで呼び出すようにしたので、Controllerクラスの単体テストにRepositoryクラスのMockを追加する。
コード
@MockBeanを使ってMockを用意して、given/willReturnを使って期待する動作を定義する
@WebMvcTest
@DisplayName("TasksController")
internal class TasksControllerTest {
@Autowired
lateinit var mockMvc: MockMvc
@MockBean
lateinit var mockTaskRepository: TaskRepository
@Nested
@DisplayName("getTask")
inner class GetTask {
@DisplayName("should return task data when get task api is called with task id.")
@Test
fun getTask() {
given(mockTaskRepository.getTask(12345))
.willReturn(Task(
123456,
"タスクのタイトル",
"タスクの詳細説明",
Date())
)
mockMvc.perform(get("/tasks/12345"))
.andExpect(status().isOk)
.andExpect(jsonPath("taskId").value(12345))
.andExpect(jsonPath("title").value("タスクのタイトル"))
.andExpect(jsonPath("description").value("タスクの詳細説明"))
.andExpect(jsonPath("userName").value("タスク担当者A"))
}
}
}
参考
26.3.12. 自動構成された Spring MVC テスト
コメントを残す