ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java/JUnit 예제
    Java 2020. 6. 15. 15:58

    * JUnit은 Java 유닛 테스트 프레임워크 중 하나

    <단정문>

    • assertArrayEquals(a,b) : 배열 a와 b가 일치함을 확인
    • assertEquals(a,b) : 객체 a와 b의 값이 같은지 확인
    • assertSame(a,b) : 객체 a와 b가 같은 객체임을 확인
    • assertTrue(a) : a가 참인지 확인
    • assertNotNull(a) : a객체가 null이 아님을 확인

    <JUnit 사용 방법>

    <예제 1>

    import java.io.IOException;
    import java.util.ArrayList;
    
    import org.junit.Ignore;
    import org.junit.Test;
    
    public class ExampleUnitTest {// extends TestCase // or ComputationUnitTest {
        private int val1, val2;
    
        private void setUp() {
            val1 = 5;
            val2 = 6;
        }
    
        @Test
        public void test() {
            setUp();
            double result = val1 + val2;
    
            assertEquals(12, result, 0);// 기대값, 데이터, 허용오차
        }
    
        @Test
        @Ignore("테스트 생략")
        public void testAdd() {
            double result = val1 + val2;
    
            assertTrue(result == 9);
        }
    
        private ArrayList<Integer> makeTestArray(int start, int end) {
            ArrayList<Integer> list = new ArrayList();
    
            for (int i=start; i<end; i++) {
                list.add(i);
            }
            return list;
        }
    
        @Test
        @Ignore("skip")
        public void testEqualsArray() {
            ArrayList<Integer> list1 = makeTestArray(1, 10);
            ArrayList<Integer> list2 = makeTestArray(1, 10);
    
            assertEquals(list1, list2);    // true
            assertSame(list1, list2);    // false -> 객체의 주소를 비교, AssertionError 발생
        }
    
        // 테스트 제한시간 설정(1초 아내 테스트 완료되지 않으면 에러 발생
        // -> java.lang.Exception: test timed out after 1000 milliseconds)
        @Test(timeout = 1000)
        @Ignore("skip")
        public void testArrayEquals() {
            int[] arr1 = {1,2,3};
            int[] arr2 = {1,2,3};
            int[] arr3 = {1,2,3,4};
            int[] arr4 = {1,2,3};
    
            assertArrayEquals(arr1, arr2);// 배열의 원소 개수가 다르거나 원소의 구성이 다른 경우 에러 발생
            assertArrayEquals(arr1, arr3);// java.lang.AssertionError: array lengths differed, expected.length=3 actual.length=4
            assertArrayEquals(arr1, arr4);// arrays first differed at element [1]; expected:<2> but was:<3>
        }
    
        // exception 테스트(RuntimeException 발생해야 테스트 성공)
        @Test(expected = RuntimeException.class)
        public void testRuntimeException() {
            throw new RuntimeException();
        }
    
        @Test(expected = IOException.class)
        public void testRuntimeException2() throws Exception {
            throw new IOException();
        }
    
        // 테스트 실패
        // -> java.lang.Exception: Unexpected exception, expected<java.lang.RuntimeException> but was<java.io.IOException>
        @Test(expected = RuntimeException.class)
        public void testRuntimeException3() throws Exception {
            throw new IOException();
        }
    
    }

    <예제 2>

    public class Calculator() {
        public Calculator() {}
    
        public int sum(int a, int b) {
            return a+b;
        }
    
        public int multiply(int a, int b) {
            return a*b;
        }
    
        public int[] addArray(int[] arr, int val) {
            for (int i=0; i<arr.length; i++) {
                arr[i] += val;
            }
            return arr;
        }
    }
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    
    import static org.junit.Assert.assertEquals;
    
    public class CalculatorUnitTest {
        Calculator calculator;
    
        @Before
        public void init() {
            this.calculator = new Calculator();
        }
    
        @After
        public void destoryObject() {
            this.calculator = null;
        }
    
        @Test
        @Ignore("SKIP")
        public void sum_isCorrect() {
            //Calculator calculator = new Calculator();
            assertEquals(4, calculator.sum(2,2));
            assertEquals(52, calculator.sum(2, 3));
            assertEquals(50, calculator.sum(20, 3));
        }
    
        @Test
        public void multiply_isCorrect() {
            //Calculator computation = new Calculator();
            assertEquals(4, calculator.multiply(2,2));
        }
    
        @Test
        public void addArray_test() {
            int arr[] = {1,2,3,4};
            int ret[] = {4,5,6,7};
            assertArrayEquals(ret, calculator.addArray(arr, 3));
            //assertArrayEquals(ret, calculator.addArray(arr, 30));// 테스트 실패
        }
    
        @Test
        public void addition_isCorrect() {
            assertEquals(4, 2 + 2);
            //assertEquals(5, 2 + 2);
        }
    
    }

    'Java' 카테고리의 다른 글

    Java/객체 정의  (0) 2020.07.18
    Java/Arrays  (0) 2020.07.12
    Java/Iterator  (0) 2020.07.09
    Java/JUnit 예제  (0) 2020.06.15
    [Java][정리] 위임(delegation)과 구현/포함(Composite) 개념  (3) 2018.03.26
    [Java][정리] Collection Framework - Iterator(반복자) 사용하는 이유  (0) 2018.02.13

    댓글 0

Designed by Tistory.