#11 [SpringBoot/KotlinでBFF]Service層のUnitTest作成

2つのRepository層を呼び出すService層のUnitTestを作成する。RepositoryクラスはMock化してService層単体のテストとなるようにする。

Package

Testコード

@SpringBootTest
@DisplayName("TasksService")
internal class TaskServiceTest {
@Autowired
lateinit var taskService: TaskService

@MockBean
lateinit var mockTaskRepository: TaskRepository

@MockBean
lateinit var mockUserRepository: UserRepository

@Nested
@DisplayName("getTask")
inner class GetTask {

@DisplayName("should return task data with user information when getTask function is called with task id.")
@Test
fun getTask() {
given(mockTaskRepository.getTask(12345))
.willReturn(Task(
12345,
"タスクのタイトル",
"タスクの詳細説明",
Date())
)

given(mockUserRepository.getUser(1))
.willReturn(User(
1,
"タスクの担当者A",
Date())
)

val actual = taskService.getTask(12345)

assertEquals(12345, actual.taskId)
assertEquals("タスクのタイトル", actual.title)
assertEquals("タスクの詳細説明", actual.description)
assertEquals("タスクの担当者A", actual.userName)
}
}
}

ControllerのUnitTest修正
ControllerクラスのUnitTestもServiceクラスを呼び出すように修正しておく。

@WebMvcTest
@DisplayName("TasksController")
internal class TasksControllerTest {
@Autowired
lateinit var mockMvc: MockMvc

@MockBean
lateinit var mockTaskService: TaskService

@Nested
@DisplayName("getTask")
inner class GetTask {

@DisplayName("should return task data when get task api is called with task id.")
@Test
fun getTask() {
given(mockTaskService.getTask(12345))
.willReturn(Task(
12345,
"タスクのタイトル",
"タスクの詳細説明",
"タスク担当者A")
)

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"))
}
}
}

実行結果

コード
https://github.com/little-engineer/bff-sample/pull/14/files

コメントを残す

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

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