자바와 JUnit을 활용한 실용주의 단위 테스트 (6), (7)

아연·2023년 11월 16일

Book

목록 보기
7/8
post-thumbnail

<자바와 JUnit을 활용한 실용주의 단위 테스트> 책과 Junit 5, AssertJ 공식문서를 참고하였습니다.



Right-BICEP

  1. Right: 결과가 올바른가?

  1. Boundary conditions: 경계 조건은 맞는가?
    • CORRECT 규칙

  1. Inverse relationship: 역 관계를 검사할 수 있는가?
    • 곱셈 - 나눗셈
    • 제곱 - 제곱근
    • 교차 검사 ex) 긍정 사례 + 부정 사례 == 전체

  1. Cross-check: 다른 수단을 활용하여 교차 검사를 할 수 있는가?

  2. Error conditions: 오류 조건을 강제로 일어나게 할 수 있는가?
    • 행복 경로의 반대인 불행한 경로도 있다는 것

  1. Performance characteristics: 성능 조건은 기준에 부합하는가?
    • 절대적인 숫자보다는 상대적인 개선량을 통해 최적화를 해야 한다.


경계조건의 CORRECT

  1. Conformance(준수): 값이 기대한 양식을 준수하고 있는가?

    • 준수할 양식이 있는 필드는 처음 입력될 때 검증하여 불필요한 검사를 최소화하자

  1. Ordering(순서): 값의 집합이 적절하게 정렬되었나?
public int compareTo(Integer anotherInteger)
  • Example - 오름차순
public List<Profile> ranked() {
	Collections.sort(profiles, 
			(p1, p2) -> ((Integer)p1.score()).compareTo(p2.score()));
	return profiles;
}
  • Example - 내림차순
public List<Profile> ranked() {
	Collections.sort(profiles, 
			(p1, p2) -> ((Integer)p2.score()).compareTo(p1.score()));
	return profiles;
}

Specified by:

compareTo in interface Comparable<Integer>

Parameters:

ParameterDescription
anotherInteger비교 대상 객체

Returns:

IntegerDescription
0this.Integer == anotherInteger
음수this.Integer < anotherInteger
양수this.Integer > anotherInteger

  1. Range(범위): 이성적인 최솟값과 최댓값 안에 있는가?

    🔥 불변식은 @After 메서드의 단언 형태로 검사 가능하다.

  • Example
public class RectangleTest {
   private Rectangle rectangle;
   
   @After
   public void ensureInvariant() {
      assertThat(rectangle, constrainsSidesTo(100));
   }

   @Test
   public void answersArea() {
      rectangle = new Rectangle(new Point(5, 5), new Point (15, 10));
      assertThat(rectangle.area(), equalTo(50));
   }

	 @Disable
   @Test
   public void allowsDynamicallyChangingSize() {
      rectangle = new Rectangle(new Point(5, 5));
      rectangle.setOppositeCorner(new Point(130, 130));
      assertThat(rectangle.area(), equalTo(15625));
   }
}
  • 불변 메서드를 내장하여 범위 테스트
    - 내부 구현 사항 노출 위험
    - 애플리케이션-도메인 제약보다 자료 구조 제약에 대해 검사


  1. Reference(참조): 코드 자체에서 통제할 수 없는 어떤 외부 참조를 포함 하고 있는가?
    • 범위를 넘어서는 것을 참고하고 있지 않은지
    • 외부 의존성은 무엇인지
    • 특정 상태에 있는 객체를 의존하고 있는지 여부
    • 반드시 존재해야 하는 그 외 다른 조건들

  1. Existence(존재): 값이 존재하는가(Non-Null, Non-Zero, 집합에 존재하는가 등)?
    • null
    • 0
    • 빈 문자열

  1. Cardinality(기수, 집합의 원소 개수): 정확히 충분한 값들이 있는가?

    🔥 0-1-n 법칙: 테스트 코드는 0, 1, n 이라는 경계 조건에만 집중


  1. Time(절대적 혹은 상대적 시간): 모든 것이 순서대로 또는 정확한 시간에 일어나는가?
    • 상대적 시간 (시간 순서)
    • 절대적 시간 (측정된 시간)
    • 동시성 문제

0개의 댓글