๐œˆ Spring Boot ํšŒ์›๊ด€๋ฆฌ TEST ๋ชจ์Œ

@Autowiredยท2022๋…„ 1์›” 10์ผ
0

Spring Boot

๋ชฉ๋ก ๋ณด๊ธฐ
6/11

ํšŒ์›๊ด€๋ฆฌ ์˜ˆ์ œ TEST ์ฝ”๋“œ ๋ชจ์Œ์ž…๋‹ˆ๋‹ค!
ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋งˆ๋‹ค ์ฃผ์„์ฒ˜๋ฆฌ๋กœ ์„ค๋ช…์„ ํ–ˆ์œผ๋‹ˆ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!!

  • ์‚ฌ์šฉ IDE : IntelliJ IDEA Ultimate
  • ์‚ฌ์šฉ DB : MySQL
  • ์‚ฌ์šฉ ์–ธ์–ด & SDK : Java & Amazon correto 11
  • ์ •๋ฆฌ๋ณธ์ž…๋‹ˆ๋‹ค ์ฐธ๊ณ ์šฉ์œผ๋กœ๋งŒ ๋ด์ฃผ์„ธ์š” :D

์ด์ „ ๊ธ€
ฮธ Spring Boot ์˜ˆ์ œ1 (ํšŒ์›๊ด€๋ฆฌ)
๐œ… Spring Boot ์˜ˆ์ œ2 (ํšŒ์›๊ด€๋ฆฌ)
๐œ† Spring Boot ์˜ˆ์ œ3 (ํšŒ์›๊ด€๋ฆฌ)
๐œ‡ Spring Boot ์˜ˆ์ œ4 (ํšŒ์›๊ด€๋ฆฌ)


Test Code

  • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

    ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ๊ทธ๋ƒฅ ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ”„๋กœ์ ํŠธ ์ „์ฒด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋˜๋Š”๊ฑฐ๋ผ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์„๊ฒ๋‹ˆ๋‹ค ใ… 
    ํ•˜์ง€๋งŒ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค๋ฉด ํ”„๋กœ์ ํŠธ ์ „์ฒด๋ฅผ ์‹คํ–‰ ํ•  ํ•„์š” ์—†์ด
    ํ…Œ์ŠคํŠธํ•  ๋ฉ”์„œ๋“œ๋งŒ ํ˜ธ์ถœํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋น ๋ฅด๊ฒŒ ๋ฌธ์ œ์ ์„ ํŒŒ์•… ํ•  ์ˆ˜ ์žˆ๊ธฐ๋„ ํ•˜๊ณ ,
    ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์˜ค๋ฅ˜๋กœ ์ธํ•ด ํ”„๋กœ์ ํŠธ๊ฐ€ ๊ผฌ์ด๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!!
    ๋”ฐ๋ผ์„œ ๊ท€์ฐฎ๋”๋ผ๋„ ํ•œ๋ฒˆ์”ฉ ๋„์ „ํ•ด๋ณด๋Š”๊ฒƒ๋„ ์ข‹์„๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค :D
    ๊ทธ๋Ÿผ ์•„๋ž˜ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋งŒ๋‚˜๋ณด๋Ÿฌ ๊ฐ€์‹œ์ฃ !!
// assert๋ฌธ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋”ฐ๋กœ import๋ฅผ ํ•ด์ค˜์•ผํ•˜๋Š” ์ฝ”๋“œ 2๊ฐœ
import static org.assertj.core.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.*; // ์˜ˆ์™ธ์ฒ˜๋ฆฌํ•˜๋Š” assert

// ํ…Œ์ŠคํŠธ์šฉ ํด๋ž˜์Šค๋กœ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๋Š” ์–ด๋…ธํ…Œ์ด์…˜
@SpringBootTest
public class MemberTest {

// ํ…Œ์ŠคํŠธ ๊ณต๊ฐ„์ด๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์„ฑ์ž์ฃผ์ž… ๋Œ€์‹  ํด๋ž˜์Šค์ฃผ์ž…์„ ํ•ด๋„ ์ƒ๊ด€ ์—†์Œ
@Autowired
private MemberService ms;

@Test // ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ ์„ ์–ธ *๋ฐ˜๋“œ์‹œ ํ•„์š”
@DisplayName("ํšŒ์› ๋ฐ์ดํ„ฐ ์ƒ์„ฑ") // ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ ์ด๋ฆ„ ์„ค์ • *ํ•„์ˆ˜๋Š” ์•„๋‹˜
public void newMembers() {
	// IntStream : for๋ฌธ๊ณผ ๋™์ผํ•œ java.util ์ œ๊ณต ์ฝ”๋“œ
	// IntStream : InputStream ์„ ์–ธ
	// rangeClosed(x, y) : x๋ถ€ํ„ฐ y๊นŒ์ง€ ์ผ์ •ํ•œ ๊ฐ„๊ฒฉ์œผ๋กœ ์ฆ๊ฐ€
	// forEach(i -> {}) : ๋ฐ˜๋ณต๋˜๋Š” ๋™์•ˆ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ ์„ ์–ธ ๊ณต๊ฐ„, i์— x๋ถ€ํ„ฐ y๊นŒ์ง€ ๋“ค์–ด๊ฐ.
	IntStream.rangeClosed(1,15).forEach(i -> {
		ms.save(new MemberSaveDTO("email"+i, "pw"+1,"name"+i));
	});
}

@Test
@Transactional // ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ฒ ๋‹ค๋Š” ์–ด๋…ธํ…Œ์ด์…˜
@Rollback // @Transactional์„ ํ†ตํ•ด ๋„ฃ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์—†๋˜ ๋ฐ์ดํ„ฐ๋กœ(์‚ญ์ œ) ํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜
@DisplayName("๋กœ๊ทธ์ธ ํ…Œ์ŠคํŠธ")
public void loginTest() {

	// 1. ๋กœ๊ทธ์ธ์šฉ ํšŒ์› ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ๋ฐ ์ €์žฅ
	MemberSaveDTO memberSaveDTO = new MemberSaveDTO("๋กœ๊ทธ์ธ์šฉ์ด๋ฉ”์ผ", "๋กœ๊ทธ์ธ์šฉ๋น„๋ฐ€๋ฒˆํ˜ธ", "๋กœ๊ทธ์ธ์šฉ์ด๋ฆ„");
	ms.save(memberSaveDTO);

	// 2. ๋กœ๊ทธ์ธ์„ ์‹œ๋„ํ•  ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ๋ฐ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ
	MemberLoginDTO memberLoginDTO = new MemberLoginDTO("๋กœ๊ทธ์ธ์šฉ์ด๋ฉ”์ผ", "๋กœ๊ทธ์ธ์šฉ๋น„๋ฐ€๋ฒˆํ˜ธ");
	boolean loginResult = ms.login(memberLoginDTO);

	// 3. assertThat์„ ํ†ตํ•ด ๋กœ๊ทธ์ธ ์„ฑ๊ณต์—ฌ๋ถ€ ๋น„๊ต
	// assertThat : ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •ํ•œ ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜๋ฉด ํ…Œ์ŠคํŠธ ํ†ต๊ณผ.
	assertThat(loginResult).isEqualTo(true);

    }

@Test
@Transactional
@Rollback
@DisplayName("์กฐํšŒ ํ…Œ์ŠคํŠธ")
public void memberListTest() {

	// ์กฐํšŒ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๊ธฐ ์ „ ํ…Œ์ด๋ธ” ๋“œ๋ž์„ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

	// 1. for๋ฌธ์„ ์ด์šฉํ•ด ์กฐํšŒ์šฉ ๋ฐ์ดํ„ฐ 3๊ฐœ ์ƒ์„ฑ ๋ฐ ์ €์žฅ
	for (int i=1; i<=3; i++) {
		ms.save(new MemberSaveDTO("์กฐํšŒ์šฉ์ด๋ฉ”์ผ"+i, "์กฐํšŒ์šฉ๋น„๋ฐ€๋ฒˆํ˜ธ"+i,"์กฐํšŒ์šฉ์ด๋ฆ„"+i));
	}

	// 2. ๋ชฉ๋ก ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ๋ฐ List์— ์ €์žฅ
	List<MemberDetailDTO> memberDetailDTOList = ms.findAll();

	// 3. List์˜ size()๊ฐ€ 3์ธ์ง€ ๋น„๊ต.
	// size()๊ฐ€ 3์ด๋ฉด ํ…Œ์ŠคํŠธ ํ†ต๊ณผ
	// ๋ฐ์ดํ„ฐ๋ฅผ 3๊ฐœ๋งŒ ๋„ฃ์—ˆ์œผ๋ฏ€๋กœ DB์—์„œ ์กฐํšŒ๋˜๋Š” ๋ฐ์ดํ„ฐ๋Š” 3๊ฐœ์—ฌ์•ผ ์ •์ƒ์ž…๋‹ˆ๋‹ค.
	assertThat(ms.findAll().size()).isEqualTo(3);
    
}
    
@Test
@Transactional
@Rollback
@DisplayName("ํšŒ์›์‚ญ์ œ ํ…Œ์ŠคํŠธ")
public void memberDelete() {

	// 1. ์‚ญ์ œ์šฉ ํšŒ์› ์ƒ์„ฑ ๋ฐ ์ €์žฅ ํ›„ ํšŒ์›๋ฒˆํ˜ธ ์ €์žฅ
	Long memberId = ms.save(new MemberSaveDTO("์‚ญ์ œ์šฉ์ด๋ฉ”์ผ", "์‚ญ์ œ์šฉ๋น„๋ฐ€๋ฒˆํ˜ธ", "์‚ญ์ œ์šฉ์ด๋ฆ„"));
	System.out.println(ms.findById(memberId));
	// ์—ฌ๊ธฐ์„œ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋ฆฐํŠธ๊ฐ€ ์ž˜ ๋˜๋Š”๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
    
	// 2. ์‚ญ์ œ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ
	ms.deleteById(memberId);
    
	// System.out.println(ms.findById(memberId));
	// ์œ„ ์ถœ๋ ฅ๋ฌธ์„ ๋Œ๋ฆฌ๋ฉด NoSuchElementException ์˜ˆ์™ธ(์˜ค๋ฅ˜) ๋ฐœ์ƒ
    
	// ์‚ญ์ œํ•œ ํšŒ์›์˜ id๋กœ ์กฐํšŒ๋ฅผ ์‹œ๋„ํ–ˆ์„ ๋•Œ null ์ด์–ด์•ผ ํ…Œ์ŠคํŠธ ํ†ต๊ณผํ•˜๊ฒŒ ๊ตฌํ˜„
	// NoSuchElementException ์˜ˆ์™ธ๋Š” ๋ฌด์‹œํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ํ•˜๋Š” ์ฝ”๋“œ
    // 3. ๋น„๊ต
	assertThrows(NoSuchElementException.class, () -> {
	assertThat(ms.findById(memberId)).isNull();
	// ์‚ญ์ œํšŒ์› id ์กฐํšŒ๊ฒฐ๊ณผ๊ฐ€ null์ด๋ฉด ํ…Œ์ŠคํŠธ ํ†ต๊ณผ
	});
    
	// assertThrows(์˜ˆ์™ธ.class, () -> { ์˜ˆ์™ธ๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ์‹คํ–‰์‹œํ‚ฌ ์ฝ”๋“œ })

}

@Test
@Transactional
@Rollback
@DisplayName("ํšŒ์›์ˆ˜์ • ํ…Œ์ŠคํŠธ")
public void memberUpdate() {

	Long memberId = ms.save(new MemberSaveDTO("์ˆ˜์ •์šฉ์ด๋ฉ”์ผ", "์ˆ˜์ •์šฉ๋น„๋ฐ€๋ฒˆํ˜ธ", "์ˆ˜์ •์ „์ด๋ฆ„"));
	MemberDetailDTO memberDetailDTO = ms.findById(memberId), memberUpdateDetailDTO = ms.findById(memberId);
	memberUpdateDetailDTO.setMemberName("์ˆ˜์ •ํ›„์ด๋ฆ„");
	assertThat(memberDetailDTO.getMemberName()).isNotEqualTo(ms.findById(ms.update(memberUpdateDetailDTO)).getMemberName());

	// ์œ„ ์ฝ”๋“œ๋ฅผ ํ’€์–ด์„œ ๋ณด๊ธฐ
	// 1. ํšŒ์› ์ถ”๊ฐ€ ๋ฐ ํšŒ์›๋ฒˆํ˜ธ ์ €์žฅ
	// Long memberId = ms.save(new MemberSaveDTO("์ˆ˜์ •์šฉ์ด๋ฉ”์ผ", "์ˆ˜์ •์šฉ๋น„๋ฐ€๋ฒˆํ˜ธ", "์ˆ˜์ •์ „์ด๋ฆ„"));

	// 2. DetailDTO ๊ฐ€์ ธ์˜ค๊ธฐ
	// ์ˆ˜์ • ์ „ DTO๋ฅผ ์ €์žฅ & ์ˆ˜์ • ๋ฉ”์„œ๋“œ๋กœ ๋ณด๋‚ผ DTO ์ƒ์„ฑ ๋ฐ ํšŒ์› ์ด๋ฆ„ ๋ณ€๊ฒฝ
	// MemberDetailDTO memberDetailDTO = ms.findById(memberId);
	// MemberDetailDTO memberUpdateDetailDTO = ms.findById(memberId);
	// memberUpdateDetailDTO.setMemberName("์ˆ˜์ •ํ›„์ด๋ฆ„");

	// 3. ์ˆ˜์ • ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ
	// ์ˆ˜์ • ๋ฉ”์„œ๋“œ์— ๋ณด๋‚ผ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ˆ˜์ •๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” memberUpdateDetailDTO๋ฅผ ๋ณด๋ƒ„.
	// memberId = ms.update(memberUpdateDetailDTO);
	// ์ˆ˜์ • ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์ด ๋๋‚œ ํ›„ ์ˆ˜์ •๋œ ๋ฐ์ดํ„ฐ๋ฅผ memberUpdateDetailDTO์— ๋‹ด์Œ.
	// memberUpdateDetailDTO = ms.findById(memberId);

	// 4. ์ˆ˜์ • ํ›„ ์ˆ˜์ • ์ „ ์ €์žฅํ•œ DTO์™€ DB์—์„œ ์ˆ˜์ •์ด ๋๋‚œ ํ›„ ๊ฐ’์„ ์ €์žฅํ•œ DTO์˜ ๊ฐ’์„ ๋น„๊ต
	// ๊ฐ’์ด ๋‹ฌ๋ผ์•ผ ์ •์ƒ์ ์œผ๋กœ ์ˆ˜์ •์ด ์ง„ํ–‰์ด ๋œ ๊ฒƒ ์ด๋ฏ€๋กœ .isNotEqualTo ๋ฅผ ์‚ฌ์šฉ.
	// System.out.println("์ˆ˜์ • ์ „ : "+memberDetailDTO.getMemberName());
	// System.out.println("์ˆ˜์ • ํ›„ : "+memberUpdateDetailDTO.getMemberName());
	// assertThat(memberDetailDTO.getMemberName()).isNotEqualTo(memberUpdateDetailDTO.getMemberName());
    
	}

}
profile
์ฆ๊ฒ๋‹ค!

0๊ฐœ์˜ ๋Œ“๊ธ€