#21 [SpringBoot/KotlinでBFF]削除 DELETEのUnitTest

Controller層

MockBeanアノテーションでService層をMock化した変数を用意
Delete成功時はレスポンスデータが無いのでMockから何も返却しないようにwill{}を使用
MockMvcクラスのインスタンスでDELETEを実行してHttpStatusがNoContentになっている事とレスポンスbodyが空である事をチェック

    @Autowired
    lateinit var mockMvc: MockMvc

    @Autowired
    lateinit var mapper: ObjectMapper

    @MockBean
    lateinit var mockTaskService: TaskService

    
    @Nested
    @DisplayName("deleteTask")
    inner class DeleteTask {

        @DisplayName("should return HttpStatus 204 with no body when delete task api is called for existing item.")
        @Test
        fun deleteTask() {
            given(mockTaskService.deleteTask(12345)).will { }

            mockMvc.perform(delete("/tasks/12345"))
                    .andExpect(status().isNoContent)
                    .andExpect(content().string(""))
        }
    }

Service層

MockitoでRepository層のMockを設定
テスト対象のfunctionを呼び出して結果をチェック
戻り値がUnit(Void)である事を確認

    @Autowired
    lateinit var taskService: TaskService

    @MockBean
    lateinit var mockTaskRepository: TaskRepository

    @Nested
    @DisplayName("deleteTask")
    inner class DeleteTask {

        @DisplayName("should return no data when deleteTask function is called with task id.")
        @Test
        fun getTask() {
            given(mockTaskRepository.deleteTask(12345)).will { }

            val actual = taskService.deleteTask(12345)

            assertEquals(Unit, actual)
        }
    }

Repository層

MockRestServiceServerで外部APIをMock化してレスポンスを設定。HttpStatus204が返ってくるように設定する。
テスト対象のfunctionを呼び出して結果をチェック

    @Autowired
    lateinit var taskRepository: TaskRepository

    @Autowired
    lateinit var objectMapper: ObjectMapper

    @Autowired
    lateinit var mockServer: MockRestServiceServer


    @Test
    @DisplayName("should be deleted and return no data when taskRepository call to DELETE task to external Task-api.")
    fun deleteTask() {
        this.mockServer.expect(requestTo("$taskApiUrl/tasks/12345"))
                .andRespond(withStatus(HttpStatus.NO_CONTENT))

        val actual = taskRepository.deleteTask(12345)

        assertEquals(Unit, actual)
    }

コード

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

コメントを残す

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

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