81일 차 - 스프링 단위 테스트 및 인수 테스트 (23.04.24)

yvonne·2023년 4월 24일
0

📂Spring

목록 보기
13/18
post-thumbnail

1. V모델 테스트

  • 단위 테스트: 함수 테스트

  • 통합 테스트: Controller 테스트

  • 시스템 테스트: 부하 테스트

  • 인수 테스트: 요구사항 분석의 인수 테스트



📝 단위 테스트

  • jUnit을 사용하여 테스트

✔ 테스트 파일 생성
✔ UserVOTest.java

package 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



profile
개발 연습장

0개의 댓글