본문 바로가기
Java

JUnit5, Mockito & Spring

by METAVERSE STORY 2022. 6. 30.
반응형
728x170

Spring에서 JUnit5를 사용해보자.
먼저 maven에 아래와 같이 dependency를 추가한다.

Properties에는 아래와 같이 3개의 version정보를 설정하고,
  <properties>
      <junit.jupiter.version>5.8.1</junit.jupiter.version>
      <junit.platform.version>1.8.1</junit.platform.version>
      <mockito.version>4.6.1</mockito.version>
  </properties>

<dependencies>에 아래와 같이 추가한다.
<dependencies>
<!-- JUNIT TEST -->
<dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>${junit.jupiter.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>${junit.jupiter.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-params</artifactId>
        <version>${junit.jupiter.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.platform</groupId>
        <artifactId>junit-platform-suite</artifactId>
        <version>${junit.platform.version}</version>
        <scope>test</scope>
    </dependency>

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>${mockito.version}</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-junit-jupiter</artifactId>
    <version>${mockito.version}</version>
    <scope>test</scope>
</dependency>
</dependencies>

이제 Java Code에 다음과 같이 추가한다.
@ExtendWith(MockitoExtension.class)
public class BatchSyncServiceImplTest{

}

DAO에서는 Database를 Connection 해서 데이터를 조회한 후 Return해주어야 한다.
하지만 테스트세서 DB를 조회하거나 변경하게되면 문제가 되므로, 해당 Method를 호출 시 가상으로 만들어진 데이터를 Return 해주도록 하자.  @BeforeEach를 적용해야, 테스트전 데이터를 세팅할 수 있다. 
@BeforeEach
void init() {
     listDBConVO = new ArrayList<DBConnectionVO>();
    DBConnectionVO dataVO1 = new DBConnectionVO();
   dataVO1.setDbUrl("testurl");
   dataVO1.setConId("con id test");
   listDBConVO.add(dataVO1);
   dataVO = new DBConnectionVO();
    dataVO.setConNumber(1);
}

when은 해당하는 method를 호출 했을때  DbConnetionDAO.selectDBConnection(dataVO) 일경우 listDBConVO를 return하도록 하는 예제이다.

@Tag("Test")
@Test
@DisplayName("Mockito selectDBTest Test")
void selectDBTest() {

try {
        when(DbConnetionDAO.selectDBConnection(dataVO)).thenReturn(listDBConVO);


listDBConVO = gameAccontBatchDAO.selectAccountDBConnection(dataVO);
for(DBConnectionVO dbConVO : listDBConVO) {
System.out.println("Con URL = "+ dbConVO.getDbUrl());
System.out.println("Con ID =  "+ dbConVO.getConId());
Assertions.assertEquals( "testurl" , dbConVO.getDbUrl()); // 가져온 데이터 검증
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("====================================");
}

이렇게 할 경우, 해당하는 데이터르 정상적으로 표현되는것을 알 수 있다.

값을 달리하여 테스트하게되면, 결과는 아래와같이 Fail뜨게 된다.


테스트를 하기위한  Annotation은 아래와 같다.

참고 : https://howtodoinjava.com/junit-5-tutorial/

 

JUnit 5 Tutorial

This JUnit 5 tutorial talks about how it adapted java 8 style of coding and several other features as well. Learn how it's different from JUnit 3 or 4.

howtodoinjava.com

 

이제 TDD(Test-Driven Development)를 즐겨보자.

반응형
그리드형

댓글