Skip to content

JUnit #
Find similar titles

Structured data

Category
Programming

JUnit #

테스트란? #

  • 어떤 개발된 코드가 올바르게 작동하는 지 확인하는 코드.
  • 픽스쳐(fixture):테스트를 수행하는 데 필요한 정보나 오브젝트.

웹을 통한 테스트의 단점 #

  • 복잡하다.
  • 어디에서 문제가 발생했는지를 찾아내야 한다.
  • 테스트의 범위가 넓기 때문에 다른 계층까지 모두 테스트에 영향을 준다.

테스트의 조건 #

  • 아주 작은 부분을 대상으로 해야 한다. - 단위테스트(Unit test)
  • 모든 테스트 메소드는 독립적이어야 한다.(테스트 메소드의 실행 순서가 그 테스트의 성공 실패를 가늠해서는 안된다.)
  • 테스트 메소드는 코드가 바뀌지 않는 이상 항상 같은 결과를 내어놓아야 한다.

테스트 주도개발(Test Driven Development) 또는 테스트 우선 개발(Test First Development) #

  • 테스트를 먼저 만들고 그 테스트를 통과할 수 있도록 코드를 작성하는 방법.
  • 이 때 테스트는 '기능정의서'와 같은 역할을 할 수 있다.

테스트 주도 개발의 장점 #

  • 테스트를 미리 만들어두었기 때문에 개발한 코드가 올바른 지 확인하는 것이 굉장히 간편하다.
  • 코드에 대한 피드백을 빠르게 받을 수 있다.

JUnit 사용법 #

테스트 메소드 생성 #

  1. public void functionName() 메소드를 만든다.
  2. @Test 어노테이션을 해당 함수에 붙인다.
    • 테스트 메소드 골격

      @Test
      public void testName(){
      // test content
      }
      

테스트 실행 전 환경 구성 #

  1. @Before 어노테이션을 환경을 구성하는 함수에 붙인다.

     @Before
     public void setUp(){
     //To do before test
     }
    

테스트 실행 후 정리 #

  1. @After 어노테이션을 정리하는 함수에 붙인다.

     @After
     public void endOfTest(){
     // To do after test
     }
    
    • @Before 나 @After 메소드는 직접 호출하는 것이 아니므로 주고받을 정보가 있다면 멤버 변수로 공유할 것

JUnit Assertions #

  • assertEquals([message], expected, actual) - 두 값이 같은 지 비교
  • assertSame([message], expected, actual), assertNotSame([messgae], expected, actual) - 두 객체가 동일한 객체인지 비교
  • assertTrue([message], expected), assertFalse([message], expected) - 참/거짓 판별
  • assertNull([messgae], expected), assertNotNull([message], expected) - null 여부 판단
  • fail([message]) - 테스트 실패로 판단
  • import static org.junit.Assert.*; 으로 static import 하여 쉽게 사용할 수 있음.

JUnit4 어노테이션 #

  • @BeforeClass : 테스트 클래스 내에서 수행 전 한 번만 실행, static method 여야 함
  • @AfterClass : 테스트 클래스 내에서 수행 후 한 번만 실행, static method 여야 함
  • @Before : 테스트 케이스 수행 전 반복실행
  • @After : 테스트 케이스 수행 후 반복실행
  • @Test : 테스트 메소드 지정

    import org.junit.*;
    
    public class Junit4Test {
        @BeforeClass
        public static void setUpBeforeClass() throws Exception {
            System.out.println("@BeforeClass");
        }
    
        @AfterClass
        public static void tearDownAfterClass() throws Exception {
            System.out.println("@AfterClass");
        }
    
        @Before
        public void setUp() throws Exception {
            System.out.println("@Before");
        }
    
        @After
        public void tearDown() throws Exception {
            System.out.println("@After");
        }
    
        @Test
        public void testCase1() throws Exception {
            System.out.println("testCase1");
        }
    
        @Test
        public void testCase2() throws Exception {
            System.out.println("testCase2");
        }
    }
    
    import org.junit.Ignore;
    import org.junit.Test;
    
    import static org.junit.Assert.*;
    
    public class Junit4Exam {
        // 예외 테스트
        @Test(expected = NumberFormatException.class)
        public void testException() throws Exception {
            String str = "hello";
            System.out.println(Integer.parseInt(str));
        }
    
        // 테스트 시간 제한
        @Test(timeout = 1000)
        public void testTimeout() throws Exception {
            long sum = 0;
            for (int i = 0; i < 10000; i++) {
                for (int j = 0; j < 10000; j++) {
                    sum += j;
                }
            }
            System.out.println(sum);
        }
    
        // 테스트 무시
        @Ignore
        @Test
        public void testIgnore() throws Exception {
            assertTrue(false);
        }
    
        // 배열 지원 - 값이랑 순서까지 동일해야 함
       @Test
        public void testAssertArrayEquals() throws Exception {
            Object[] a = {"Java", "Python", 1};
            Object[] b = {"Java", "Python", 1};
            assertArrayEquals(a, b);
        }
    }
    

    Incoming Links #

    Related Data Sciences #

0.0.1_20140628_0