메모

[Framework] JUnit 이란?

surimi🍥 2021. 1. 11. 09:13
반응형

JUnit은 Java에서 Unit(단위)별로 테스트를 도와주는 프레임워크이다.

(한 단위란 일반적으로 한 클래스를 말한다.)

 

TDD (테스트 주도 개발)의 익스트림 프로그래밍(eXtream Programming, XP)에 사용되는 기능이며

구현과 동시에 테스트 코드르 작성함으로 고객이 원하는 소프트웨어를 빠른 시간 내에 (약 2주)

프로토타입으로 전달하며 수시로 발생하는 요구사항에 민첩하게 대처할 수 있게 한다.

*참조 : 나무위키 "TDD"

 

 

xUnit는 다른 여러 언어도 지원한다.

CUnit C http://cunit.sourceforge.net/
CppUnit C++ https://sourceforge.net/projects/cppunit/
PHPUnit PHp https://phpunit.de/
PyUnit Python http://pyunit.sourceforge.net/
JUnit Java http://junit.org/

 

 

1. JUnit 환경구축하기

  • pom.xml의 모습
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13.1</version>
    <scope>test</scope>
</dependency>

2. JUnit assert관련 Method

Method내용

assertArrayEquals(a,b) 배열 a와b가 일치함을 확인한다.
assertEquals(a,b) 객체 a와b의 값이 같은지 확인한다.
assertSame(a,b) 객체 a와b가 같은 객체임을 확인한다.
assertTrue(a) a가 참인지 확인한다.
assertFalse(a) a가 거짓인기 확인한다.
assertNotNull(a) a객체가 Null이 아님을 확인한다.

3. JUnit Function Flow

  • setUp() : 테스트 대상 클래스의 실행전에 가장 먼저 setUP()을 실행한다.
    • ex) 네트워크 연결, DB 연결에 활용한다.
  • tearDown() : 가장 마지막에 수행되며 setUp()의 반대 개념으로 생각하면 된다.
    • ex) 네트워크 연결 종료, DB 연결을 종료하는데 활용한다.
  • setUp()과 tearDown()은 Test Case를 진행할때마다 반복적으로 실행된다.
    • ex) setUp() -> TestA() -> tearDown() -> setUp() -> TestB() -> tearDown()

4. JUnit Annotation

  • @Test : 해당 Method는 Test대상 메소드임을 의미한다.
public class Example {

    @Test
    public void method() {
       org.junit.Assert.assertTrue( new ArrayList().isEmpty() );
    }
 }
  • @BeforeClass : 해당 테스트가 시작 전에 딱 한 번씩만 수행되도록 지정한다.

public class Example { @BeforeClass public static void onlyOnce() { ... } @Test public void one() { ... } @Test public void two() { ... } }

public class Example {

   @BeforeClass public static void onlyOnce() {
      ...
   }
   @Test public void one() {
      ...
   }
   @Test public void two() {
      ...
   }
}
  • @AfterClass : 해당 테스트가 끝나고 딱 한 번씩만 수행되도록 지정한다.
public class Example {

   DatabaseConnection database;
   
   @BeforeClass public static void login() {
         database= ...;
   }
   @Test public void something() {
         ...
   }
   @Test public void somethingElse() {
         ...
   }
   @AfterClass public static void logout() {
         database.logout();
   }
}
  • @Before : 해당 테스트가 진행이 시작되기 전에 작업할 내용을 호출한다.
public class Example {

   List empty;
   
   @Before public void initialize() {
      empty= new ArrayList();
   }
   @Test public void size() {
      ...
   }
   @Test public void remove() {
      ...
   }
}
  • @After : 해당 테스트가 진행이 끝난 후에 작업할 내용을 호출한다.
public class Example {

    File output;
    
    @Before public void createOutputFile() {
          output= new File(...);
    }
    @Test public void something() {
          ...
    }
    @After public void deleteOutputFile() {
          output.delete();
    }
 }
  • @Ignore : TestCase를 무시할 수 있다.
@Ignore
public class IgnoreMe {

  @Test public void test1() { ... }
  @Test public void test2() { ... }
}
  • Flow

출처 : nesoy.github.io/articles/2017-02/JUnit

Reference

반응형