단위 테스트: 함수 테스트
통합 테스트: Controller 테스트
시스템 테스트: 부하 테스트
인수 테스트: 요구사항 분석의 인수 테스트
✔ 테스트 파일 생성
✔ UserVOTest.javapackage edu.global.ex.vo; import static org.junit.jupiter.api.Assertions.*; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import lombok.extern.slf4j.Slf4j; @Slf4j @SpringBootTest class UserVOTest { @Test void userVOtest() { UserVO vo = new UserVO(); log.info("객체 생성" + vo); System.out.println(vo); assertNotNull(vo); vo.setPassword("1234"); vo.setUsername("홍길동"); System.out.println(vo); assertNotNull(vo); assertEquals(vo.getUsername(),"홍길동"); // Username과 같으면 테스트 성공 } }
- 결과
🔎 datasource (커넥션풀) jUnit 테스트
✔ DataSourceTest.java
package edu.global.ex.db; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import javax.sql.DataSource; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import lombok.extern.slf4j.Slf4j; @Slf4j @SpringBootTest // 모든 빈들을 스캔()하고 애플리케이션 컨텍스트를 생성하여 테스트를 생성 class DataSourceTest { @Autowired private DataSource datasource; @Test void testDataSource() { System.out.println(datasource); assertNotNull(datasource); } @Test void testConnection() throws Exception { System.out.println("DS=" + datasource); try (Connection conn = datasource.getConnection()) { System.out.println("Connection=" + conn); assertNotNull(conn); assertThat(conn).isInstanceOf(Connection.class); assertEquals(100, getLong(conn, "select 100 from dual")); } catch (Exception e) { e.printStackTrace(); } } private long getLong(Connection conn, String sql) { long result = 0; try (Statement stmt = conn.createStatement()) { ResultSet rs = stmt.executeQuery(sql); if (rs.next()) { result = rs.getLong(1); } rs.close(); } catch (Exception e) { e.printStackTrace(); } return result; } }
- 결과
🔎 테스트 케이스 무시하고 싶을 때 : @Disabled 사용
✔ UserMapperTest.java
package edu.global.ex.mapper; import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.lang.Nullable; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import edu.global.ex.vo.UserVO; import lombok.extern.slf4j.Slf4j; @Slf4j @SpringBootTest class UserMapperTest { @Autowired private UserMapper userMapper; @Disabled @Test void testInsertUser() { UserVO user = new UserVO(); user.setUsername("kim5"); user.setPassword(passwordEncoder.encode("1234")); user.setEnabled(1); userMapper.insertUser(user); } @Test void testInsertAdmin() { UserVO user = new UserVO(); user.setUsername("admin4"); user.setPassword(passwordEncoder.encode("1234")); user.setEnabled(1); userMapper.insertUser(user); userMapper.insertAdminAuthorities(user); } @Autowired private PasswordEncoder passwordEncoder; @Autowired private UserVO userVO; @Test void testPassWordEncoder() { String plainPW = "1234"; String encodePW = passwordEncoder.encode(plainPW); System.out.println(plainPW + " : " + encodePW); System.out.println(passwordEncoder.matches(plainPW, encodePW)); System.out.println(userVO); // assertNotEquals(plainPW, encodePW); // 두 변수가 다를 때 성공 // assertEquals(plainPW, encodePW); // 두 변수가 같을 때 성공 (String 비교) assertTrue(new BCryptPasswordEncoder().matches(plainPW, encodePW)); // return 값이 true,false인지 boolean타입으로 비교 } }
🔎 MockMvc 테스트
✔ HomeControllerTest.java