반응형
설정을 담당하는 Bean 이 있다면 자동으로 contractor 이 될것이기 때문에 값이 자동으로 주입된다
가령 다음과 같은 것 형태다
application.properties
test.string.one = test-one
test.string.two = test-two
Configuration Bean
@Configuration
public class TestConfig {
@Value("${test.string.one}")
private String testOne;
@Value("${test.string.two}")
private String testTwo;
public String getTestOne() {
return testOne;
}
public String getTestTwo() {
return testTwo;
}
}
이 상태에서 Test를 작성하려는데 TestConfig 의 빈을 생성하려면 생성자가 막혀있기 때문에 @SpringBootTest 밖에 생각나지 않았다.
@SpringBootTest를 사용하면 테스트가 너무 무겁기 때문에 좀더 가볍게 할 필요가 있어 Mock 을 사용하기로 했다.
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import static org.mockito.BDDMockito.given;
@ExtendWith(MockitoExtension.class)
class TestConfigTest {
@Mock
TestConfig testConfig;
@Test
@DisplayName("config Bean 테스트")
void configBeanTest() {
String testOne = "test-one";
String testTwo = "test-two";
// given
given(testConfig.getTestOne()).willReturn(testOne);
given(testConfig.getTestTwo()).willReturn(testTwo);
// when
// then
Assertions.assertEquals(testOne, testConfig.getTestOne());
Assertions.assertEquals(testTwo, testConfig.getTestTwo());
System.out.println("testOne = " + testOne);
System.out.println("testTwo = " + testTwo);
}
}
하나씩 보면 ExtendWith 를 이용해 MockitoExtension을 쓴다고 선언했다.
해당 클래스가 없다면 gradle 이나 Maven에서 다음 의존성을 추가해야 한다.
SpringBoot 의 경우 'org.springframework.boot:spring-boot-starter-test'가 추가되어 있다면 자동으로 붙는다.
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
또는 아래 찾아서 넣어주기
mockito-junit-jupiter
mockito-junit-core
given을 통해 Mock으로 생성된 객체가 해당 메서드를 실행했을때 어떤값을 리턴해야 하는지를 설정한다
String testOne = "test-one";
String testTwo = "test-two";
given(testConfig.getTestOne()).willReturn(testOne);
given(testConfig.getTestTwo()).willReturn(testTwo);
이후 간단한 비교로 테스트를 마무리했다.
Assertions.assertEquals(testOne, testConfig.getTestOne());
Assertions.assertEquals(testTwo, testConfig.getTestTwo());
결과
끝.
반응형
'공부 > 프로그래밍' 카테고리의 다른 글
[dbms] where에 In 절 사용 시 알아두면 좋은 것 (0) | 2020.02.27 |
---|---|
[mysql] 조회, Index냐 Full Scan이냐 (2) | 2020.02.21 |
[java] objectMapper로 object->string(json) 변경 시 LocalDate 를 yyyy-MM-dd 포멧하기 (0) | 2020.02.19 |
[java] NoSuchMethodError MockitoLogger 에러가 날 때 (0) | 2020.02.18 |
[intellij] junit 으로 작성한 테스트가 gradle 로 실행될때 (3) | 2020.02.13 |
댓글