JVM/JUnit

[JUnit] 소개 - 2. Assertion 과 Assumption

헹창 2022. 11. 1.
반응형

Assertion

실제 테스트에서 검증하고자 하는 내용을 확인하는 기능

org.junit.jupiter.api.Assertions.*

Method

메소드명 설명
fail 무조건 실패
assertTrue 조건이 True 이면 성공
assertFalse 조건이 False 이면 성공
assertNull 조건이 Null 이면 성공
assertNotNull 조건이 Not Null 이면 성공
assertEquals 기대값(expected) 와 실제값(actual)이 동일하면 성공
assertArrayEquals 두 Array가 동일하면 성공
assertIterableEquals 두 Iterable이 동일하면 성공
assertLinesMatch 두 Stream이 동일하면 성공
assertNotEquals 기대값(expected) 와 실제값(actual)이 같지 않으면 성공
assertSame 동일한 Object면 성공
assertNotSame 동일하지 않은 Object면 성공
assertAll 여러 Assertion이 True면 성공
assertThrows 예상한 에러가 발생하면 성공
assertDoesNotThrow 에러가 발생하지 않으면 성공
assertTimeout 테스트가 지정한 시간보다 오래 걸리지 않으면 성공,
지정한 시간보다 오래걸려도 테스트가 끝날때까지 대기
assertTimeoutPreemptively 테스트가 지정한 시간보다 오래 걸리지 않으면 성공,
지정한 시간보다 오래걸린 경우 바로 테스트 종료

Example

  • assert
  • message
public class Study {
    @Test
    void setCalculator{
		assertEquals(3, calculator.add(1,1));
		assertEquals(3, calculator.add(1,1), "계산 결과가 일치하지 않는다.");	// 검증 실패 시 메시지 설정
		assertEquals(3, calculator.add(1,1), () -> "계산 결과가 일치하지 않는다.");	// 검증 실패 시 람다식 함수 사용하여 메시지 설정
		assertEquals(3, calculator.add(1,1), new Supplier<String>(){		// 검증 실패 시 Supplier 사용하여 메시지 설정
				@Override
				public String get() {
					return "계산 결과가 일치하지 않는다.";
				}
		});
    }
}
  • assertEquals
  • assertThrows
public class Study {
    @Test
    void setCalculator {
		assertEquals(3, calculator.add(1,1));
		assertThrows(ArithmeticException.class, () -> calculator.divide(1,1));
    }
}
  • assertAll
public class Study {
    @Test
    void setCalculator{
		assertAll(
        	() -> assertEquals(3, calculator.add(1,1)),
        	() -> assertThrows(ArithmeticException.class, () -> calculator.divide(1,1))
		);
    }
}
  • assertTimeout
public class Study {
    @Test
    void setCalculator{
        assertTimeout(Duration.ofMillis(100), () -> {  
            // 이 code block은 100ms 이상이 걸린다. => block 로직 종료된 후 fail
            Thread.sleep(300);           
        });
    }
}
  • assertTimeoutPreemptively
public class Study {
    @Test
    void setCalculator{
        assertTimeoutPreemptively(Duration.ofMillis(100), () -> {  
            // 이 code block은 100ms 이상이 걸린다. => 100ms 지나면 즉시 fail
            Thread.sleep(300);           
        });
    }
}

 

Assumption

검증 조건에 따라 그 뒤의 테스트 실행 여부 설정

org.junit.jupiter.api.Assuptions.*

Example (코드 실행 방식)

  • assumeTrue (조건)
public class Study {
	private String env = "local";

    @Test
    void setCalculator {
        assumeTrue("dev".equalsIgnoreCase(env));	// true가 아니면 @Disabled                 
        assertEquals(3, calculator.add(1,1))
    }
}
  • assuption message
public class Study {
	private String env = "local";

    @Test
    void setCalculator {
        assumeTrue("dev".equalsIgnoreCase(env),
				() -> "Aborting test: not on developer workstation");	
        assertEquals(3, calculator.add(1,1))
    }
}
  • assumingThat (조건, 테스트)
public class Study {
	private String env = "local";
    @Test
    void setCalculator {
		assumingThat(env.equalsIgnoreCase("dev"), () -> {
    		System.out.println("dev environment");
    		assertEquals(3, calculator.add(1,1));
		});

		System.out.println("local environment");
		assertEquals(2, calculator.add(1,1));
    }
}

Example (Annotation 실행 방식)

  • @Enabled_, @Disabled
  @Enabled_ @Disabled_
OnOs @EnabledOnOs @DisabledOnOs
OnJre @EnabledOnJre @DisabledOnJre
IfSystemProperty @EnabledIfSystemProperty @DisabledIfSystemProperty
IfEnvironmenttVariable @EnabledIfEnvironmenttVariable @DisabledIfEnvironmenttVariable
If @EnabledIf @DisabledIf
public class Study {
    @Test
    @EnabledIfEnviromentVariable(named="TEST_ENV", matches="LOCAL")
    void setCalculator_1 {
        assertEquals(2, calculator.add(1,1));
    }  
    @Test
    @EnabledOnOS(OS.MAC, OS.LINUX)    // OS가 MAC이거나 LINUX인 경우만 테스트를 실행한다
    void setCalculator_2 {
        assertEquals(2, calculator.add(1,1));
    }
    @Test
    @DisabledOnOS(OS.MAC)    // OS가 MAC인 경우는 테스트를 실행하지 않는다.
    void setCalculator_3 {
        assertEquals(2, calculator.add(1,1));
    }
}
728x90
반응형

댓글

추천 글