728x90
JavaCOde
@ExtendWith(SpringExtension.class)
public class TodoServiceTests {
@MockBean
private TodoRepository repository;
private TodoService service;
private Todo stub;
@BeforeEach
public void setUp() {
service = new TodoService(repository);
stub = todoStub();
}
@Test
public void 한개의_TODO를_반환해야한다() {
// Given
given(repository.findById(1L)).willReturn(Optional.of(stub));
// When
Todo actual = service.findById(1L);
// Then
assertThat(actual).isNotNull();
assertThat(actual).isEqualTo(stub);
}
public Todo todoStub() {
return Todo.builder()
.id(1L)
.title("테스트")
.description("테스트 상세")
.done(false)
.createdAt(LocalDateTime.now())
.updatedAt(LocalDateTime.now()).build();
}
}
KotlinCode
@ExtendWith(SpringExtension::class)
class TodoServiceTests {
@MockkBean
lateinit var repository: TodoRepository //프레임워크 자체에서 lateinit을 해준다
lateinit var service: TodoService
val stub: Todo by lazy {
Todo(
id = 1,
title = "테스트",
description = "테스트 상세",
done = false,
createdAt = LocalDateTime.now(),
updatedAt = LocalDateTime.now(),
)
}
@BeforeEach
fun setUp() {
service = TodoService(repository)
}
@Test
fun `한개의 TODO를 반환해야한다`() {
//Given
every { repository.findByIdOrNull(1) } returns stub //중위표현식을 사용해 표기할 수 있다
//When
val actual = service.findById(1L)
//Then
assertThat(actual).isNotNull
assertThat(actual).isEqualTo(stub)
}
}
build.gradle.kts
//...
dependencies {
//...
testImplementation("com.ninja-squad:springmockk:3.1.1") //테스트 목키토 라이브러리
}
//..
- Test를 조금 더 코틀린스럽게 작성할 수 있도록 지원하는 springmockk를 사용하자
- class를 참조할 때 더 이상. class로 접근하는 것이 아닌 프로퍼티 레퍼런스로 접근하면 된다.
- lateinit 키워드를 통해 프레임워크 자체에서 늦게 해당 빈을 주입해 줄 수 있다.
- lazy 키워드를 사용해 stub같은 경우 호출 시점에 1번만 초기화를 진행시켜 줄 수 있다(지연 초기화)
- every는 given과 같이 사용할 수 있으며, 중위 표기법을 사용해 returns 뒤에 중위 표기법으로 작성해 줄 수 있다.
728x90
'실무 프로젝트로 배우는 Kotlin & Spring > 자바 프로젝트(ToDo프로젝트) 코틀린으로 리팩토링 하기' 카테고리의 다른 글
| 도메인(Domain, Repository) 리펙토링 (0) | 2022.11.05 |
|---|---|
| Service 리펙토링 (0) | 2022.11.05 |
| Controller, Dto 리펙토링 (0) | 2022.11.05 |
| JAVA 프로젝트에 코틀린 설정 적용 (0) | 2022.11.05 |