2.1 JUNIT 테스트 고려사항 구현

2021. 8. 11. 16:52JAVA/JUNIT

글의 목적

  1.  2. JUNIT 사용하기 글에서 Profile 클래스의 matches 메서드에 대한 테스트 케이스 고려사항을 구현하는 것을 실습합니다.

https://yonghwankim-dev.tistory.com/89

 

2. JUNIT 사용

본 글은 자바와 JUNIT을 활용한 실용주의 단위 테스트 도서의 내용을 복습하기 위해 작성된 글입니다. 글의 목적 실전에 가까운 코드를 분석 코드에 대한 경로를 커버하는 1~2개의 테스트 코드 구

yonghwankim-dev.tistory.com

 

위 글의 테스트 고려사항에서 몇몇개는 다른 테스트 케이스와 중복되는 사항이 존재합니다.

 

Profile 클래스의 matches 메서드 테스트 케이스 고려사항

1. Criteria 인스턴스가 Criterion 객체를 포함하지 않을 때

//	테스트 코드3, Criteria 인스턴스가 Criterion 객체를 포함하지 않을때
	@Test
	public void notContainCriterionForCriteria(){
		// 준비
		// 없음
		
		// 실행 : Criterion 객체가 포함되지 않고 매치 수행
		boolean matches = profile.matches(criteria);
		
		// 단언 : false
		assertFalse(matches);	
	}

 

2. answer.get()에서 반환된 Answer 객체가 null일 때

//	테스트 코드4, answer.get()에서 반환된 Answer 객체가 null일 때
	@Test(expected = NullPointerException.class)
	public void answerIsNullWhenAnswerGet(){
		// 준비
		Question question2 = new BooleanQuestion(2, "not Got bonuses?");
		profile.add(new Answer(question, Bool.FALSE));	
		criteria.add(new Criterion(new Answer(question2, Bool.TRUE), Weight.MustMatch));
		
		// 실행 : profile에 존재하지 않은 criterion 객체 설정후 수행
		// 단언 : NullPointerException 
		boolean matche = profile.matches(criteria);
		
	}

 

 

3.criterion.getAnswer()의 반환값이 null일 때

//	테스트 코드5, criterion.getAnswer()의 반환값이 null일때
	@Test(expected = NullPointerException.class)
	public void criterionGetAnswerIsNull(){
		// 준비
		profile.add(new Answer(question, Bool.FALSE));	
		criteria.add(new Criterion(null, Weight.MustMatch));
		
		// 실행 : criterion.getAnswer()의 반환값이 null이 되도록 수행
		// 단언 : NullPointerException 
		boolean matche = profile.matches(criteria);
	}

 

4. criterion.getAnswer().getQuestionText()의 반환값이 null일때

//	테스트 코드6, criterion.getAnswer().getQuestionText()의 반환값이 null일때
	@Test(expected = NullPointerException.class)
	public void criterionGetAnswerGetQuestionTextIsNull(){
		// 준비
		profile.add(new Answer(question, Bool.FALSE));	
		criteria.add(new Criterion(new Answer(null,Bool.TRUE), Weight.MustMatch));
		
		// 실행 : criterion.getAnswer().getQuestionText()의 반환값이 null일때 수행
		// 단언 : NullPointerException 
		boolean matche = profile.matches(criteria);
	}

 

5. criterion.getWeight()의 반환값이 Weight.DontCare여서 match 변수가 true일때

//	테스트 코드7, criterion.getWeight()의 반환값이 Weight.DontCare여서 match 변수가 true일때
	@Test
	public void criterionGetWeightIsDontCare(){
		// 준비
		profile.add(new Answer(question, Bool.FALSE));	
		criteria.add(new Criterion(new Answer(question,Bool.TRUE), Weight.DontCare));
		
		// 실행 : profile 대답은 false, criterion 대답은 true, 하지만 가중치(Weight)는 DontCare, 매치수행
		boolean matche = profile.matches(criteria);
		
		// 단언 : true
		assertTrue(matche);
	}

 

6. 두 조건문이 모두 false여서 결과적으로 match 변수가 false가 될때

//	테스트 코드8, 두 조건문이 모두 false여서 결과적으로 match 변수가 false가 될때
	@Test
	public void twoConditionIsAllFalse(){
		// 준비
		profile.add(new Answer(question, Bool.FALSE));	
		criteria.add(new Criterion(new Answer(question,Bool.TRUE), Weight.MustMatch));
		
		// 실행 : profile 대답은 false, criterion 대답은 true, 무조건 일치일때 매치 수행
		boolean matche = profile.matches(criteria);
		
		// 단언 : false
		assertFalse(matche);
	}

 

7. match 변수가 false이고 criterion.getWeight()가 Weight.MustMatch여서 kill 변수가 true일 때

//	테스트 코드9, match 변수가 false이고 criterion.getWeight()가 Weight.MustMatch여서 kill 변수가 true일 때
	@Test
	public void matchIsFalseAndCriterionGetWeightIsMustMatch(){
		// 준비
		profile.add(new Answer(question, Bool.FALSE));	
		criteria.add(new Criterion(new Answer(question,Bool.TRUE), Weight.MustMatch));
		
		// 실행 : profile 대답은 false, criterion 대답은 true, 무조건 일치일때 매치 수행
		boolean matche = profile.matches(criteria);
		
		// 단언 : false
		assertFalse(matche);
	}

 

8. match 변수가 true이기 때문에 kill 변수가 변하지 않을때

//	테스트 코드10, match 변수가 true이기 때문에 kill 변수가 변하지 않을때
	@Test
	public void matchIsTrue(){
		// 준비
		profile.add(new Answer(question, Bool.TRUE));	
		criteria.add(new Criterion(new Answer(question,Bool.TRUE), Weight.MustMatch));
		
		// 실행 : profile 대답은 true, criterion 대답은 true, 무조건 일치일때 매치 수행
		boolean matche = profile.matches(criteria);
		
		// 단언 : true
		assertTrue(matche);
	}

 

9. criterion.getWeight()가 Weight.MustMatch가 아니기 때문에 kill 변수가 변하지 않을때

//	테스트 코드11, criterion.getWeight()가 Weight.MustMatch가 아니기 때문에 kill 변수가 변하지 않을때
	@Test
	public void matchIsTrueAndCriterionGetWeightIsMustMatch(){
		// 준비
		profile.add(new Answer(question, Bool.FALSE));	
		criteria.add(new Criterion(new Answer(question,Bool.TRUE), Weight.DontCare));
		
		// 실행 : profile 대답은 false, criterion 대답은 true, MustMatch가 아닐때 수행
		boolean matche = profile.matches(criteria);
		
		// 단언 : true
		assertTrue(matche);
	}

 

실행결과

 

References

자바와 JUnit을 활용한 실용주의 단위 테스트
실습 소스 코드 : https://github.com/yonghwankim-dev/JUNIT-study/tree/main/iloveyouboss_06/test/iloveyouboss

'JAVA > JUNIT' 카테고리의 다른 글

AssertJ 테스트시 객체의 동등성(Equality) 검증 방법  (0) 2024.04.07
3.2 예외를 기대하는 세 가지 방법  (0) 2021.08.13
3.1 JUnit 단언  (0) 2021.08.13
2. JUNIT 사용  (1) 2021.08.11
1. 첫번째 JUnit 테스트 만들기  (0) 2021.08.10