본문 바로가기
Framework/✔️JUnit5

TDD를 위한 JUnit5 사용법 3 - 조건, 환경에 따른 테스트 실행

by 발개발자 2022. 9. 3.
반응형

Junit에서는 특정한 OS, JAVA 버전, 환경변수, 시스템변수 등 이러한 환경이나 조건에 따라 테스트 실행을 지원해주는 메서드가 존재한다.

 

바로 org.junit.jupiter.api.Assumeptions.* 해당하는

  assumeTrue(조건)

  assumeThat(조건, 테스트)

이다.

 

이러한 assume 활용하여 특정 환경변수나 자바버전이나 이런 경우에 따라 테스트를 실행할 있다.

예를 봐보자.

 

@Test
@DisplayName("스터디 만들기 ")
void create_new_study() {
	String test_env = System.getenv("TEST_ENV");
	
	assumeTrue("LOCAL".equals(test_env));
	System.out.prinln("LOCAL");
	
}

여기서 assumeTrue에서 true로  통과하여야 다음 테스트코드들이 실행하게 된다.

 

또한 assume에서는 조건이 일치할 때, 람다를 이용해 해당 테스트 블록을 작성하여 실행시킬 수 있는 메서드가 있는데 assumeThat이다.

 

@DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class)
class StudyTest {

	@Test
	@DisplayName("스터디 만들기 ")
	void create_new_study() {
		Map<String,String> env = new HashMap<>();
		env.put("TEST_ENV", "LOCAL");
		String test_env = env.get("TEST_ENV");
		
		assumeTrue("LOCAL".equals(test_env));
		
		assumingThat("LOCAL".equals(test_env), ()->{
			System.out.println("LOCAL");
			Study actual = new Study(10);
			assertThat(actual.getLimit()).isGreaterThan(0);
		});
		
		assumingThat("PROD".equals(test_env), ()->{
			System.out.println("PROD");
			Study actual = new Study(10);
			assertThat(actual.getLimit()).isGreaterThan(0);
		});
	}

}

위와 같이 작성하면, TEST_ENV라는 환경변수의 값이 LOCAL과 일치하기 때문에 해당 블록만 실행하게 된다.

 

이렇게 소스코드로 환경 조건에 따른 테스트를 실행하게 만들 있었다.

 

다음은, 어노테이션을 이용해 조건에 따른 테스트 실행을 알아보자.

 

  @Enabled___

  @Disabled___

  • OnOs
  • OnJre
  • IfSystemProperty
  • IfEnviromentVariable
  • If

 

Enabled Disabled 이용해 다양한 조건에 따른 테스트 몇가지를 알아보자.

 

  OnOS

@Test
	@DisplayName("스터디 만들기 ")
	@EnabledOnOs({OS.WINDOWS, OS.MAC})
	void create_new_study() {
		Map<String,String> env = new HashMap<>();
		env.put("TEST_ENV", "LOCAL");
		String test_env = env.get("TEST_ENV");
		
		System.out.println("LOCAL");
		Study actual = new Study(10);
		assertThat(actual.getLimit()).isGreaterThan(0);

	}

위의 코드 같이 EnabledOnOS 이용해 Windows Mac에서 실행시 있다.

 

반대로 DisabledOnOS 이용해 특정 OS에서 실행을 제외시킬 있다.

@Test
	@DisplayName("스터디 만들기 ")
	@DisabledOnOs({OS.WINDOWS, OS.MAC})
	void create_new_study() {
		Map<String,String> env = new HashMap<>();
		env.put("TEST_ENV", "LOCAL");
		String test_env = env.get("TEST_ENV");
		
		System.out.println("LOCAL");
		Study actual = new Study(10);
		assertThat(actual.getLimit()).isGreaterThan(0);

	}

 

 

  OnJre

	@Test
	@DisplayName("스터디 만들기 ")
	@EnabledOnJre(JRE.JAVA_11)
	void create_new_study() {
		Map<String,String> env = new HashMap<>();
		env.put("TEST_ENV", "LOCAL");
		String test_env = env.get("TEST_ENV");
		
		System.out.println("LOCAL");
		Study actual = new Study(10);
		assertThat(actual.getLimit()).isGreaterThan(0);

	}



        @Test
	@DisplayName("스터디 만들기 ")
	@DisabledOnJre(JRE.JAVA_11)
	void create_new_study() {
		Map<String,String> env = new HashMap<>();
		env.put("TEST_ENV", "LOCAL");
		String test_env = env.get("TEST_ENV");
		
		System.out.println("LOCAL");
		Study actual = new Study(10);
		assertThat(actual.getLimit()).isGreaterThan(0);

}

 

위와 같이 Java 버전에 따라서도 테스트 동작을 컨트롤 할 수 있다.

 

 

 

  IfEnviromentVariable

	@Test
	@DisplayName("스터디 만들기 ")
	@EnabledIfEnvironmentVariable(named="TEST_ENV", matches = "LOCAL")
	void create_new_study() {
		
		Study actual = new Study(10);
		assertThat(actual.getLimit()).isGreaterThan(0);

}

아까 assume 사용하여 환경변수를 조건으로 테스트를 실행한 소스를 위와같이 IfEnviromentVariable사용하여 대체할 있다. 환경변수에서 TEST_ENV가 LOCAL가 매치될 경우만 해당 테스트를 실행하게 된다.

 

반응형

댓글