본문 바로가기
공부/프로그래밍

[junit5] 생성자만 열려있는 오브젝트 테스트하기(mockito)

by demonic_ 2020. 2. 20.
반응형

 

설정을 담당하는 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());

 

결과

 

 

끝.

반응형

댓글