Back-end/Spring

[Spring] ν…ŒμŠ€νŠΈ μžλ™ν™” - JUnit 도ꡬ ν™œμš©

πŸ’‘ ν…ŒμŠ€νŠΈλ₯Ό ν•΄μ•Όν•˜λŠ” 이유?

 

  • ν…ŒμŠ€νŠΈλž€ μ˜λ„ν–ˆλ˜ λŒ€λ‘œ μ½”λ“œκ°€ μ •ν™•νžˆ λ™μž‘ν•˜λŠ”μ§€λ₯Ό ν™•μΈν•΄μ„œ λ§Œλ“  μ½”λ“œλ₯Ό ν™•μ‹ ν•  수 있게 ν•΄μ£ΌλŠ” μž‘μ—…
  • ν…ŒμŠ€νŠΈμ˜ κ²°κ³Ό μ›ν•˜λŠ” λŒ€λ‘œ λ‚˜μ˜€μ§€ μ•ŠλŠ” 경우 μ½”λ“œλ‚˜ 섀계에 결함이 μžˆμŒμ„  μ•Œ 수 있음
  • μ΅œμ’…μ μœΌλ‘œ ν…ŒμŠ€νŠΈκ°€ μ„±κ³΅ν•˜λ©΄ λͺ¨λ“  결함이 μ œκ±°λλ‹€λŠ” 확신을 얻을 수 있음

 

πŸ’‘ μž‘μ€ λ‹¨μœ„μ— ν…ŒμŠ€νŠΈ

 

ν…ŒμŠ€νŠΈν•˜κ³ μž ν•˜λŠ” λŒ€μƒμ΄ λͺ…ν™•ν•˜λ©΄ κ·Έ λŒ€μƒμ—λ§Œ μ§‘μ€‘ν•΄μ„œ ν…ŒμŠ€νŠΈν•˜λŠ” 것이 λ°”λžŒμ§ν•˜λ‹€.

λ”°λΌμ„œ λΆ„λ¦¬ν•˜κ³  μ§‘μ€‘ν•΄μ„œ μ ‘κ·Όν•˜μž

 

이것을 λ‹¨μœ„ ν…ŒμŠ€νŠΈλΌκ³  ν•œλ‹€.

 

μ§€κΈˆκΉŒμ§€ λ§Œλ“€μ–΄ 온 UserDaoTest도 DB의 μƒνƒœλ₯Ό ν…ŒμŠ€νŠΈν•˜κ³  μžˆμ–΄ λ‹¨μœ„ ν…ŒμŠ€νŠΈλΌκ³  해도 λœλ‹€.

 

 

πŸ’‘ μžλ™ μˆ˜ν–‰ ν…ŒμŠ€νŠΈ μ½”λ“œ

 

UserDaoTest의 νŠΉμ§• 쀑 ν•˜λ‚˜λŠ”

ν…ŒμŠ€νŠΈ ν•  데이터가 μ½”λ“œλ₯Ό 톡해 제곡되고,  ν…ŒμŠ€νŠΈμ˜ μž‘μ—… μ—­μ‹œ μ½”λ“œλ₯Ό 톡해 μžλ™μœΌλ‘œ 싀행됨이닀.

즉, ν…ŒμŠ€νŠΈμ˜ μ „ 과정이 μžλ™μœΌλ‘œ μ§„ν–‰λœλ‹€λŠ” 것이닀.

 

λ”°λΌμ„œ ν…ŒμŠ€νŠΈλ₯Ό 자주 μˆ˜ν–‰ν•΄λ„ 뢀담이 μ—†λ‹€.

 

 

πŸ’‘ UserDaoTest의 문제점

 

  • μˆ˜λ™ 확인 μž‘μ—…μ˜ λ²ˆκ±°λ‘œμ›€

         λͺ¨λ‘ μžλ™μœΌλ‘œ μ§„ν–‰ν•˜μ§€λ§Œ, μ—¬μ „νžˆ μ‚¬λžŒμ˜ 눈으둜 ν™•μΈν•˜λŠ” 과정이 ν•„μš”ν•œ μ½”λ“œ

 

  • μ‹€ν–‰ μž‘μ—…μ˜ λ²ˆκ±°λ‘œμ›€

         μ•„무리 κ°„λ‹¨νžˆ μ‹€ν–‰ κ°€λŠ₯ν•œ λ©”μ†Œλ“œμ§€λ§Œ 맀번 그것을 μ‹€ν–‰ν•˜λŠ” 것은 λ²ˆκ±°λ‘œμ›€

 

 

πŸ’‘ JUnit을 ν™œμš©ν•œ ν…ŒμŠ€νŠΈ μ „ν™˜

 

✏️ JUnitμ΄λž€?

 

이름 κ·ΈλŒ€λ‘œ μžλ°”λ‘œ λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό λ§Œλ“€ λ•Œ μœ μš©ν•˜κ²Œ μ“Έ 수 있게 λ§Œλ“€μ–΄μ£ΌλŠ” ν”„λ ˆμž„μ›Œν¬

 

μš”κ΅¬ν•˜λŠ” 쑰건

  1.  λ©”μ†Œλ“œκ°€ public으둜 선언돼야 ν•œλ‹€.
  2.  @TestλΌλŠ” μ• λ…Έν…Œμ΄μ…˜μ„ λ©”μ†Œλ“œ μ•žμ— λΆ™μ—¬μ€€λ‹€.

✏️ JUnit λ™μž‘ κ³Όμ •

 

  1. ν…ŒμŠ€νŠΈ ν΄λž˜μŠ€μ—μ„œ @Testκ°€ 뢙은 ν…ŒμŠ€νŠΈ λ©”μ†Œλ“œλ₯Ό λͺ¨λ‘ μ°ΎλŠ”λ‹€.
  2. ν…ŒμŠ€νŠΈ 클래슀의 였브젝트λ₯Ό ν•˜λ‚˜ λ§Œλ“ λ‹€.
  3. @Beforeκ°€ 뢙은 λ©”μ†Œλ“œκ°€ 있으면 μ‹€ν–‰ν•œλ‹€.
  4. @Testκ°€ 뢙은 λ©”μ†Œλ“œλ₯Ό ν•˜λ‚˜ ν˜ΈμΆœν•˜κ³  ν…ŒμŠ€νŠΈ κ²°κ³Όλ₯Ό μ €μž₯ν•΄λ‘”λ‹€.
  5. @Afterκ°€ 뢙은 λ©”μ†Œλ“œκ°€ 있으면 μ‹€ν–‰ν•œλ‹€.
  6. λ‚˜λ¨Έμ§€ ν…ŒμŠ€νŠΈ λ©”μ†Œλ“œμ— λŒ€ν•΄ 2~5λ²ˆμ„ λ°˜λ³΅ν•œλ‹€.
  7. λͺ¨λ“  ν…ŒμŠ€νŠΈμ˜ κ²°κ³Όλ₯Ό μ’…ν•©ν•΄μ„œ λŒλ €μ€€λ‹€.

 

πŸ’‘ UserDaoTest μ½”λ“œ (JUnit) - JUnit 라이브러리 μΆ”κ°€ ν•„μš”!

@Test
public void addAndGet() throws SQLException, ClassNotFoundException {
	ApplicationContext context = new AnnotationConfigApplicationContext(DaoFactory.class);
		
	UserDao dao = context.getBean("userDao", UserDao.class);
    //...μƒλž΅
}

 

πŸ’‘ κ²€μ¦ μ½”λ“œ

assertThat(user2.getName(), is(user.getName())을 μ‚¬μš©ν•˜μž

 

✏️ assertThatμ΄λž€?

 

첫번째 νŒŒλΌλ―Έν„°μ™€ λ‘λ²ˆμ§Έ νŒŒλΌλ―Έν„°λ₯Ό λΉ„κ΅ν•΄μ„œ ν…ŒμŠ€νŠΈλ₯Ό ν•΄μ€€λ‹€. 

λ§Œμ•½, ν…ŒμŠ€νŠΈ μ‹€νŒ¨μ‹œ AssertionErrorλ₯Ό 던질 것이닀.

 

assertThat(user2.getName(), is(user.getName()));

 

🧯 μ°Έκ³ : 

 

κ΅¬ν˜„μ„ ν• λ•Œ, asserThat(user2.getName(), is(user.getName())μ—μ„œ is에 μ—λŸ¬κ°€ λ‚˜μ™”λŠ”λ°,

JUnit5λ₯Ό μ“°κ³  μžˆμœΌμ‹œλ‹€λ©΄, μ•„λž˜ 3개λ₯Ό importν•΄μ£Όλ©΄ ν•΄κ²°λœλ‹€.

 

import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;

 

 

πŸ’‘ JUnit ν…ŒμŠ€νŠΈ μ‹€ν–‰

 

JUnit은 ν”„λ ˆμž„μ›Œν¬μ΄κΈ° λ•Œλ¬Έμ— JUnit을 μ‹œμž‘μ‹œμΌœ μ€˜μ•Ό ν•œλ‹€.

 

main()λ©”μ†Œλ“œμ— JUnit을 μ‹œμž‘μ‹œμΌœμ£ΌλŠ” 클래슀인 JUnitCore 클래슀λ₯Ό ν˜ΈμΆœν•΄μ£Όμž

 

import org.junit.runner.JUnitCore;


public class Main {

	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		// TODO Auto-generated method stub
		JUnitCore.main("UserDaoTest");
        
	}

}

 

μ½”λ“œ μ €μž₯μ†Œ : https://github.com/withseungryu

 

withseungryu - Overview

exchange student at georgia college & state university - withseungryu

github.com

μ°Έκ³  λ¬Έμ„œ : 

ν† λΉ„μ˜ μŠ€ν”„λ§3 (이일민)

λ°˜μ‘ν˜•