2장 JUnit 진짜로 써보기 & 3장 JUnit 단언 깊게 파기

bluesky·2022년 1월 28일
0
post-custom-banner

서론

Junit이 무엇인가?

  • Unit test를 하기 위한 framework 기능을 하는 라이브러리.

왜 Junit을 써야하는가? 쓰면 좋은가?

장점.

  • 자동화된 테스트를 만들수 있다.
  • 더욱 손쉽게 리팩토링 할수 있다(테스트 코드를 믿고, 검증을 다 통과하는 식으로)
  • 장기적 유지보수 관점으로 보면 안썼을떄 보다 시간을 단축시킨다.

단점.

  • 초기에 공수가 더든다.(테스트도 작성 & 실제 기능도 작성.)
  • 기능이 바뀌면 테스트코드도 수정해야한다(손이 더감.)

본론

2장 Junit 써보기

테스트 대상의 이해

  • Profile.java
package iloveyouboss;

import java.util.*;

public class Profile { 
   private Map<String,Answer> answers = new HashMap<>();
   private int score;
   private String name;

   public Profile(String name) {
      this.name = name;
   }
   
   public String getName() {
      return name;
   }

   public void add(Answer answer) { 
      answers.put(answer.getQuestionText(), answer);
   }
   
   public boolean matches(Criteria criteria) { 
      score = 0;
      
      boolean kill = false;
      boolean anyMatches = false; 
      for (Criterion criterion: criteria) {   
         Answer answer = answers.get(
               criterion.getAnswer().getQuestionText()); 
         boolean match = 
               criterion.getWeight() == Weight.DontCare || 
               answer.match(criterion.getAnswer());

         if (!match && criterion.getWeight() == Weight.MustMatch) {  
            kill = true;
         }
         if (match) {         
            score += criterion.getWeight().getValue();
         }
         anyMatches |= match;  
      }
      if (kill)       
         return false;
      return anyMatches; 
   }

   public int score() {
      return score;
   }
}

테스트 만들기.

리펙토링을 해봅시다!

package iloveyouboss;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import org.junit.Before;
import org.junit.Test;

public class ProfileTest2 {
	Question question;
	Profile profile;
	Criteria criteria;
	@Before
	public void initialize() {
		question = new BooleanQuestion(0, "get more than 20 annual leave?");
		profile = new Profile("dongseok Inc.");
		criteria = new Criteria();
	}
	
	@Test
	public void didmustmatchworkwell() {
		profile.add(new Answer(question, Bool.FALSE));
		criteria.add(new Criterion(new Answer(question, Bool.TRUE), Weight.MustMatch));
		
		boolean matches = profile.matches(criteria);
//		System.out.println(matches);
		assertFalse(matches);
//		assertTrue(matches);
	}
	
	
	@Test
	public void diddontcareworkwell() {
		profile.add(new Answer(question, Bool.FALSE));
		criteria.add(new Criterion(new Answer(question, Bool.TRUE), Weight.DontCare));
		
		
		boolean matches = profile.matches(criteria);
//		System.out.println(matches);
//		assertFalse(matches);
		assertTrue(matches);
	}
}

3장 Junit 단언 깊게 파기

Junit 단언의 방법

package iloveyouboss;

//import static org.junit.Assert.assertTrue;
import static org.junit.Assert.*;

import org.junit.Ignore;

import static org.hamcrest.CoreMatchers.*;

import org.junit.Test;

public class AssertTest {
	//assertTrue
	@Test
	public void assertTrueTest() {
		boolean b1 = true;
		assertTrue(b1);
	}
	
	//assertFalse
	// 생략.
	
	
	//assertThat
	@SuppressWarnings("deprecation")
	@Ignore
	@Test
	public void assertThatTest() {
		assertThat(1,equalTo(2));
	}
	
	@Test
	public void startwithTest() {
		assertThat("asdf", not(startsWith("aswd")));
	}
	
}

Junit 예외기대하는 3가지 방법.

  • to be continued

결론

  • 공통된 환경 설정을 위해선 @Before 어노테이션을 쓰면 된다.
  • 단언에는 여러가지 방법이 있다.
  • 예외를 처리하는 방법도 여러가지가 있다.
  • 테스트코드도 리펙토링이 필요하다.
profile
SMART https://github.com/dongseoki?tab=repositories
post-custom-banner

0개의 댓글