Spring(2023-04-24)

권단비·2023년 4월 24일
0

Test방법

목록 보기
1/3

[테스트 문서]

테스트의 중요성

http://databaser.net/moniwiki/wiki.php/소프트웨어개발프로세스

1.소프트웨어 품질(오류 없는 제품)
→전문테스터(QA)가 소프트웨어의 품질을 결정짓는다.

단위테스트 : 함수테스트(VO, Mapper, Service)
통합테스트 : 컨트롤러테스트
시스템테스트 : 부하테스트
인수테스트 : 요구사항분석에 있는 인수 테스트

[01.단위테스트]

단위테스트 : 해당 클래스의 함수를 테스트하는 것

1.VO 테스트
2.커넥션 풀(data source) 테스트
3.DB연결 테스트

웹서버가 http프로토콜을 담당.
현업에서 제우스를 많이 사용하고 있음
톰캣사용

Junit : 단위테스트를 도와주는 도구
Junit = 이클립스 = 에릭 감마(제작)
Junit은 톰캣을 돌리지 않는다.(Test이기 때문)


[UserVO.java]
package edu.global.ex.vo;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class UserVO {
	private String username;
	private String password;
	private int enabled;

	private List<AuthVO> authList;
}
--------------------------------------------------------------------------
[UserVOTest.java]
package edu.global.ex.vo;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@SpringBootTest
class UserVOTest {
	@Test // Junit이 제공하는 기본적인 어노테이션
	void userVOtest() {
		UserVO vo = new UserVO();
		log.info("객체 생성" + vo);

		vo.setPassword("1234");
		vo.setUsername("홍길동");

		System.out.println(vo);
		// 주소가 아닌 값이 나왔기에 toString 적용을 확인할 수 있다.
		// UserVO(username=null, password=null, enabled=0, authList=null)

		assertNotNull(vo); // NotNull이면 초록창을 띄워라
		assertEquals(vo.getUsername(),"홍길동"); // 
	}
}


[DataSourceTest.java]
package edu.global.ex.vo;
import static org.junit.jupiter.api.Assertions.assertNotNull;
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 // Junit이 제공하는 기본적인 어노테이션
	void dataSourcetest() {
		System.out.println(datasource);
		assertNotNull(datasource);
	}
}

HikariDataSource(null)이 출력되는 이유
→Hikari Connection Pool 사용


[UserMapperTest.java]
package edu.global.ex.mapper;

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.security.crypto.password.PasswordEncoder;

import edu.global.ex.vo.UserVO;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@SpringBootTest // 모든 빈(객체)들을 스캔하고 어플리케이션 context(Junit)를 생성하여 테스트를 실행한다.
//IOC Container 이름 : WebApplicationcontext
//톰캣의 context를 사용하지 않음
class UserMapperTest {

	@Autowired
	private UserMapper userMapper;

	@Autowired
	private PasswordEncoder passwordEncoder;

//	하기를 테스트 testInsertUser
//	UserMapper.java의 @Insert("insert into AUTHORITIES (username,AUTHORITY) values(#{username},'ROLE_USER')")
//	public void insertAuthorities(UserVO UserVO);
	@Disabled // 테스트하지 말라는 뜻
	@Test
	void testInsertUser() {
		UserVO user = new UserVO();
		user.setUsername("kim5");
		user.setPassword(passwordEncoder.encode("1234"));
		user.setEnabled(1);

		userMapper.insertUser(user);
		userMapper.insertAuthorities(user);
	}

//	하기를 테스트 testInsertAdmin
//	@Insert("insert into AUTHORITIES (username,AUTHORITY) values(#{username},'ROLE_ADMIN')")
//	public void insertAdminAuthorities(UserVO UserVO);
	@Disabled
	@Test
	void testInsertAdmin() {
		UserVO user = new UserVO();
		user.setUsername("admin4");
		user.setPassword(passwordEncoder.encode("1234"));
		user.setEnabled(1);

		userMapper.insertUser(user);
		userMapper.insertAdminAuthorities(user);
	}
	
	@Test
	void testInsertAdmin2() {
		UserVO user = new UserVO();
		user.setUsername("admin5");
		user.setPassword(passwordEncoder.encode("admin5"));
		user.setEnabled(1);

		userMapper.insertUser(user);
		userMapper.insertAdminAuthorities(user);
	}
}


[UserService.java]
package edu.global.ex.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import edu.global.ex.mapper.UserMapper;
import edu.global.ex.vo.UserVO;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Service
public class UserService {
	@Autowired
	private UserMapper userMapper;

	public int addUser(UserVO user) {
		log.info("addUser()..");
		return userMapper.insertUser(user);
	}
}
--------------------------------------------------------------------------
package edu.global.ex.service;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.security.crypto.password.PasswordEncoder;
import edu.global.ex.mapper.UserMapper;
import edu.global.ex.vo.UserVO;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@SpringBootTest
class UserServiceTest {

	@Autowired
	private UserService userService;

	@Test
	void addUserTest() {
		UserVO vo = new UserVO();
		log.info("객체 생성" + vo);

		vo.setUsername("홍길동2");
		vo.setPassword("1234");

		System.out.println(vo);

		assertNotNull(vo); // NotNull이면 초록창을 띄워라
		assertEquals(vo.getUsername(), "홍길동2");

		userService.addUser(vo);
	}
}

[02.통합테스트]

Mock Test : 웹브라우저

[HomeController.java]
package edu.global.ex.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@Controller
public class HomeController {

	@GetMapping("/")
	public String home() {
		return "home";
	}

	@GetMapping("/user/userHome")
	public void userHome() { // void는 return값이 없지만, userHome.jsp를 리턴함
		log.info("userHome ...");
	}
//상기 userHome함수는 하기와 동일한 의미이다.
//	@GetMapping("/user/userHome")
//	public String userHome() {
//		log.info("userHome ...");
//		return "user/userHome";
//	}

	@GetMapping("/admin/adminHome")
	public void adminHome() {
		log.info("adminHome ...");
	}
}
--------------------------------------------------------------------------
[HomeControllerTest.java]

0개의 댓글