JUnit 테스트

kmb·2023년 8월 5일
0

스프링부트

목록 보기
7/7
post-thumbnail

Junit5 테스트코드

Java기반의 단위테스트를 위한 프레임워크이다.
Annotation 기반으로 테스트를 지원하며, Assert(예상, 실제)를 통해서 검증한다.
SpringBoot 2.2버전이상부터 Junit5를 기본적으로 사용하도록 설정되었다.

 

테스트 종류

1) 단위 테스트 (Unit Test) : 하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트

2) 통합 테스트 (Intergration Test) : 모듈을 통합하는 과정에서 모듈간의 호환성을 확인하기 위해 수행되는 테스트

 

테스트 코드를 작성하는 이유

1) 문서화 역할
2) 코드의 결함을 발견
3) 리팩토링시 안정성 확보
4) 테스트하기 쉬운 코드 작성시 더 낮은 결합도를 가진 설계를 얻을 수 있다.


JUnit5

JUnit Platform, JUnit Jupiter, JUnit Vintage의 결합형태

  • JUnit Platform : 테스트를 실행해주는 런처와 TestEngine API를 제공
  • JUnit Jupiter : TestEngine API 구현체로 JUnit5에서 제공
  • JUnit Vintage : TestEngine API 구현체로 JUnit3, 4에서 제공

TDD (Test Driven Development)

테스트가 주도하는 개발을 의미. 테스트 코드를 먼저 작성하는 것부터 시작.

  • 항상 실패하는 테스트를 먼저 작성하고 (Red)
  • 테스트가 통과하는 프로덕션 코드를 작성하고 (Green)
  • 테스트가 통과하면 프로덕션 코드를 리팩토링한다 (Refactor)

단위 테스트(Unit Test)는 TDD의 첫번째 단계인 '기능 단위의 테스트 코드를 작성' 하는것이다. 따라서 단위 테스트는 TDD와 달리 테스트 코드를 꼭 먼저 작성해야 하는것은 아니며 리팩토링도 포함되지 않는다. 순수하게 테스트 코드만 작성하는것을 의미한다.

테스트 코드를 작성을 도와주는 프레임워크들 중에서 대중적인것이 xUnit이며 개발환경에 따라서 Java의 경우 JUnit, DB의 경우 DBUnit, C++의 경우 CppUnit 이 있다.

 

BDD (Behavior Driven Development)

행동 주도의 개발.
즉 사용자의 행위를 생각하면서 시나리오를 기반으로 테스트 코드를 작성하는 방법.
하나의 시나리오는 given-when-then 구조를 갖는다.

@Test
public void given_when_then(){

	// given - precondition or setup

	// when - action or the behaviour that we are going test

	// then - verify the output
}

Junit5 테스트코드 구현

 

build.gradle

testImplementation 'org.springframework.boot:spring-boot-starter-test'

// test에서 lombok 사용 -> @Sl4j 사용가능
testCompileOnly 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'

// test sql 확인용
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.8.0'

 
1) HelloController클래스 및 문자열 hello를 반환하는 hello( ) 메서드 생성.

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {

        return "hello";
    }
}

2) src/test/java 디렉토리 위치에 테스트 클래스 생성.

@RunWith(SpringRunner.class)
@WebMvcTest
public class HelloControllerTest {

    @Autowired
    private MockMvc mvc;

    @Test
    public void helloReturn() throws Exception {

        String hello = "hello";

        mvc.perform(get("/hello"))
                .andExpect(status().isOk())
                .andExpect(content().string(hello));
    }
}

이후에 테스트를 Run 하면
테스트가 통과되는것을 확인 할 수 있다.

 

참고

profile
꾸준하게

1개의 댓글

comment-user-thumbnail
2023년 8월 5일

훌륭한 글 감사드립니다.

답글 달기