#8 [SpringBoot/KotlinでBFF]Controllerの単体テストに下位レイヤーのMockを追加する方法

外部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 テスト

コード

https://github.com/little-engineer/bff-sample/pull/1

コメントを残す

メールアドレスが公開されることはありません。

ABOUT US
little
15年以上プログラマーをしているエンジニアです。Kotlin, Java, Python, C++を使用したServerSideの開発に携わってきました。とりあえずやってみるスタイルで記事を更新していきます。