TDD

  1. SpringBoot 테스트 코드

    • @SpringBootTest 어노테이션을 통해 스프링부트 어플리케이션 테스트에 필요한 거의 모든 의존성을 제공한다.
    • @RunWith 어노테이션은 JUnit 프레임워크가 테스트를 실행할 시(JUnit은 내장된 Runner를 테스트 시 실행하고 됨) 테스트 실행방법을 확장할 때 쓰는 어노테이션
  2. TDD(Test Driven Development · 테스트 주도 개발) 3가지 절차

    • 실패
      • 실패하는 테스트 케이스를 먼저 만드는 것
      • 상황에 따라 한번에 여러개를 만들어도 된다.
    • 성공
      • 실패하는 테스트 케이스를 통과시키기 위한 코드를 작성
    • 리팩토링
      • 중복되는 코드, 개성 할 코드에 대한 리팩토링 생각
  3. 장점
    • 작은 단위로 만들기 때문에 코드의 모듈화가 이뤄질 수 있다.
    • 유지보수가 쉬워진다.
  4. 생각할 점
    • 간단하다고 생각한 기능이라도 후에 유지 보수를 위해서 테스트가 있다면 좀 더 효율적일 듯 하다.
    • 그러나 시간이 정해져 있고, 작은 기능을 빠르게 생산해야 하는 일이라면 굳이 작성을 하지 않아도 될듯하다.
    • 테스트 코드를 먼저 만들고 개발을 시작하는게 습관이 되어 있지 않다면 처음에 작성하는게 쉽지 않을 수 있다고도 생각한다.

참고할만한 블로그 : https://dhsim86.github.io/web/2017/03/16/spring_boot_introduce-post.html

  1. Junit5

    JUnit5 = JUnit Platform + JUnit Jupiter + Junit Vintage

    • JUnit Platform : 테스트를 발견하고 테스트 계획을 생성하는 TestEngine 인터페이스를 가지고 있다. Platform은 TestEngine을 통해서 테스트를 발경하고 ,실행하고 ,결과를 보고한다.

    • JUnit Jupiter : TestEngine의 실제 구현체는 별도 모듈이다. 모듈 중 하나가 jupiter-engine이다. 이 모듈은 jupiter-api를 사용해서 작성한 테스트 코드를 발견하고 실행한다. Jupiter API는 JUnit 5에 새롭게 추가된 테스트 코드용 API로서, 개발자는 Jupiter API를 사용해서 테스트 코드를 작성할 수 있다.

    • JUnit Vintage : 기존에 JUnit 4 버전으로 작성한 테스트 코드를 실행할 때에는 vintage-engine 모듈을 사용한다.

    • 기존 JUnit4는 JUnit라이브러리만 정의 해준면 되지만(All in one), 5의 경우 3개의 모듈로 나누어 져 있는것을 알 수 있다.

    • Junit 4의 경우 Java 5이상이여야 하며, JUnit 5의 경우는 Java 8이상이여야 한다.

    • 달라진 부분

      • JUnit4의 경우 첫 번째 파라미터로 전달을 받았으나, JUnit5에서는 마지막 파라미터로 전달을 받는다.

      • // junit 4 
        assertEquals("meesage parameter", "expected value", "actual value");
                
        // junit 5 
        assertEquals("expected value", "actual value", "meesage parameter");
        
      • JUnit5의 경우 람다를 사용할 수 있다.

      • assertTrue(1 == 1, () -> "Assertion messages can be provided by Java 8 Lambdas ");
                
        Throwable exception = expectThrows(IllegalArgumentException.class, () -> {
              throw new IllegalArgumentException("Invalid age.");
            });
        
      • assumeNoException, assumeNotNull deprecated되었다.