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
コメントを残す