쩨이엠 개발 블로그

[ Spring ] Spring boot Test (@RunWith, @ExtendWith) 본문

개발/Spring

[ Spring ] Spring boot Test (@RunWith, @ExtendWith)

쩨이엠 2020. 5. 9. 09:48
728x90
반응형

 

보통은 테스트 코드를 짜면서 코드를 짠다지만.. 사실 쉽지않다 ㅋㅋㅋㅋ

이번에도 코드를 짜고 그거 테스트하겠다고 테스트코드를 짜기 시작했는데 생각보다 많은걸 알게되어서 정리하는 용도로 쓴다.

 

경우는 MVC 필요없는 간단한(?) 코드이므로 @SpringBootTest라는 거대한 아이를 쓰지 않는 방향으로 설계했다.

@SpringBootTest application 띄우기때문에 통합테스트에 용이하지만 대신 시간도 오래걸리고 무겁기때문에 단위테스트하는데는 알맞지 않다(서버 올리는데 너무 오래걸려서 짜증났다).

 

해서 이번에 Test 어노테이션은 

@RunWith(MockitoJUnitRunner.class)

@ExtendWith(MockitoExtension.class) 이 두개가 되겠다

 

필요한 dependency 

 

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

 

DataServiceTests.java

package com.test.service;

//@RunWith(MockitoJUnitRunner.class)
@ExtendWith(MockitoExtension.class)
class DataServiceTests {
    @InjectMocks
    private DataService service;

    @Mock
    private WpasDataMapper mapper;

    @BeforeEach
    public void setUp() {
        System.out.println("setUp");
        mockMapper();
        service.initQcStepItem();
    }

    @Test
    void test_InspectQcData() {
    	service.inspectQcData();
    }
    
}

 

@RunWith(MockitoJUnitRunner.class)

Mockito Mock 객체를 사용하기 위한 Annotation이다

class 위에 달아준다

 

@ExtendWith(MockitoExtension.class)

Mockito Mock 객체를 사용하기 위한 Annotation이다

class 위에 달아준다

 

JUnit4에서는 RunWith(MockitoJUnitRunner.class)를,

JUnit5에서는 ExtendWith를 쓰도록 되어있다

 

 

@Mock

mock객체를 생성한다

 

 

@InjectMocks

생성한 Mock객체를 주입(inject)하여 사용할 있도록 만든 객체이다

쉽게 말하면 @InjectMocks에서 쓰는 객체를 @Mock으로 만들어 가져다 붙이는것

 

Service @InjectMocks

mapper @Mock 붙이면 실제로 mapper 붙은것처럼 동일하게 사용할 있다

 

 

실제 Service 코드 

DataService.java

@Service
@Slf4j
public class DataService {
    @Autowired
    private DataMapper mapper;

	...

}

 

@BeforeEach

테스트 케이스 시작 전에 먼저 실행하는 어노테이션이다

직접 하나하나 넣어도 되지만 케이스가 많은 경우엔 어노테이션 하나로 끝낼 있다

 

보통 initialize용으로 많이 쓴다

 

테스트 실행시 setUp 로그가 테스트 마다 나오는 것을 확인 할 수 있다

728x90
반응형
Comments