본문 바로가기

Junit Test

java by 낼스 2019. 7. 12.
# Junit Test #### Reference - [junit : https://junit.org/junit4/](https://junit.org/junit4/) - [junit cook book : http://junit.sourceforge.net/doc/cookbook/cookbook.htm](http://junit.sourceforge.net/doc/cookbook/cookbook.htm) - [junit tutorial : https://www.tutorialspoint.com/junit/junit_ignore_test.htm](https://www.tutorialspoint.com/junit/junit_ignore_test.htm) - [Junit 설정 : http://kamang-it.tistory.com/110](http://kamang-it.tistory.com/110) - [JUnit으로 유닛 테스팅하기(2) : http://kamang-it.tistory.com/305](http://kamang-it.tistory.com/305) - [assertThat : http://sejong-wiki.appspot.com/assertThat](http://sejong-wiki.appspot.com/assertThat) - [JUnit 정리 & 기본 사용법 : http://jkonury.tistory.com/196](http://jkonury.tistory.com/196) - [hamcrest 로 가독성있는 jUnit Test Case 만들기 : https://www.lesstif.com/pages/viewpage.action?pageId=18219426](https://www.lesstif.com/pages/viewpage.action?pageId=18219426) - [java main assert : https://www.google.co.kr/search?q=java+main+assert&safe=off&lr=lang_ko&sa=X&ved=0ahUKEwjNt4L9ma3cAhXRNpQKHR23ANYQuAEIIw&biw=1745&bih=861](https://www.google.co.kr/search?q=java+main+assert&safe=off&lr=lang_ko&sa=X&ved=0ahUKEwjNt4L9ma3cAhXRNpQKHR23ANYQuAEIIw&biw=1745&bih=861) #### assert란? 가정 설정문(假定設定文) 또는 어서션(영어: assertion)은 프로그램 안에 추가하는 참·거짓을 미리 가정하는 문이다. 개발자는 해당 문이 그 문의 장소에서 언제나 참이라고 간주한다. 런타임 중에 표명이 거짓으로 평가되면 표명 실패(assertion failure)를 초래하며 이 상황에서는 일반적으로 실행이 중단된다. 참고 : (https://ko.wikipedia.org/wiki/%ED%91%9C%EB%AA%85) #### assertThat 사용법 assertThat은 assertThat(T actual, Matcher matcher) #### JUnit Assertions ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== code 설명 ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== assertEquals([message], expected, actual) 두 값이 같은 지 비교 assertSame([message], expceted, actual) 두 객체가 동일한 객체인지 비교 assertNotSame([message], expceted, actual) 두 객체가 동일한 객체인지 비교 assertTrue([message], expceted) 참/거짓 판별 assertFalse([message], expceted) 참/거짓 판별 assertNull([message], expceted) null여부 판단 assertNotNull([message], expceted) null여부 판단 fail([message]) 테스트 실패로 판단 assertArrayEquals 두 배열이 똑같은 값을 가진 똑같은 크기의 배열인지 확인 assertThat 해당 개체가 특정 상황을 만족하는지 확인 ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== import static org.junit.Assert.*; 으로 static import 하여 쉽게 사용할 수 있음. #### JUnit4의 특징 1. Java5 애노테이션 지원 2. test라는 글자로 method 이름을 시작해야 한다는 제약 해소 Test 메소드는 @Test를 붙인다 3. 좀 더 유연한 픽스처 @BeforeClass, @AfterClass, @Before, @After 4. 예외 테스트 @Test(expected=NumberFormatException.class) 5. 시간 제한 테스트 @Test(timeout=2000) 6. 테스트 무시 @Ignore(“”) 7. 배열 지원 assertArrayEquals([message], expected, actual); 8. @RunWith(클래스 이름.class) JUnit Test 클래스를 실행하기 위한 러너(Runner)를 명시적으로 지정한다. @RunWith는 junit.runner.Runner를 구현한 외부 클래스를 인자로 갖는다. 9. @SuiteClasses(Class[]) 보통 여러 개의 테스트 클래스를 수행하기 위해 쓰인다. @RunWith를 이용해 Suite.class를 러너로 사용한다. 10. 파라미터를 이용한 테스트 @RunWith(Parameterized.class) @Parameters public static Collection data() { } #### Junit4 애노테이션 @BeforeClass : 테스트 클래스 내에서 수행 전 한 번만 실행, static method 여야 함 @AfterClass : 테스트 클래스 내에서 수행 후 한 번만 실행, static method 여야 함 @Before : 테스트 케이스 수행 전 반복실행 @After : 테스트 케이스 수행 후 반복실행 @Test : 테스트 메소드 지정 ==== Example ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== 1. JUnit 메소드 실행 순서 Example ```java /** Junit4Test.java **/ 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"); } } ``` 2. JUnit @Test @Ignore Example ```java /** Junit4Exam.java **/ import org.junit.Ignore; import org.junit.Test; import static org.junit.Assert.*; public class Junit4Exam { // 예외 테스트 // @Test(expected = NumberFormatException.class) @Ignore public void testException() throws Exception { System.out.println("start-testException()"); String str = "hello"; try { int intValue = Integer.parseInt(str); System.out.println(intValue); } catch ( NumberFormatException ex ) { throw ex; } } // 테스트 시간 제한 // @Test(timeout = 10000) @Ignore public void testTimeout() throws Exception { System.out.println("start-testTimeout()"); 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 { System.out.println("start-testIgnore()"); assertTrue(false); } // 배열 지원 - 값이랑 순서까지 동일해야 함 @Test public void testAssertArrayEquals() throws Exception { System.out.println("start-testAssertArrayEquals()"); Object[] a = { "Java", "Python", 1 }; Object[] b = { "Java", "Python1", 1 }; assertArrayEquals(a, b); } } ``` 3. JUnit Suite Example - 실행 : Suite Class 는 여러개의 테스트 클래스를 한번에 호출할 수 있다. ```java /** TestSuite.java **/ import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; import org.junit.runner.RunWith; import org.junit.runners.Suite; @RunWith(Suite.class) //@Suite.SuiteClasses( { Junit4Test.class, Junit4Exam.class }) @Suite.SuiteClasses( { Junit4Exam.class }) public class TestSuite { } ``` 4. JUnit Runner Example - 실행 ```java /** TestRunner.java **/ import org.junit.Ignore; import org.junit.Test; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertTrue; import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.notification.Failure; public class TestRunner { // 예외 테스트 public static void main(String[] args) { // Result result = JUnitCore.runClasses(Junit4Test.class); Result result = JUnitCore.runClasses(Junit4Exam.class); for (Failure failure : result.getFailures()) { System.out.println(failure.getTrace() + " / " + failure.toString()); } System.out.println("result.wasSuccessful() : " + result.wasSuccessful()); } } ``` 5. JUnit Testcase Example ```java /** JavaTest.java **/ import java.util.ArrayList; import java.util.List; public class ListTest { private List lstFruits = new ArrayList(); public void add(String fruit) { lstFruits.add(fruit); } public void remove(String fruit) { lstFruits.remove(fruit); } public int size() { return lstFruits.size(); } public void removeAll(){ lstFruits.clear(); } } ``` # JavaTest.java ```java import junit.framework.TestCase; public class JavaTest extends TestCase { protected int value1, value2; protected ListTest lstTest = new ListTest(); protected void setUp() { lstTest.add("Apple"); lstTest.add("Orange"); lstTest.add("Grapes"); } public void testSize() { assertEquals("Checking size of List", 3, lstTest.size()); } public void testAdd() { lstTest.add("Banana"); assertEquals("Adding 1 more fruit to list", 4, lstTest.size()); } public void testRemove() { lstTest.remove("Orange"); assertEquals("Removing 1 fruit from list", 2, lstTest.size()); } protected void tearDown() { lstTest.removeAll(); } } ```

'java' 카테고리의 다른 글

Javascript Destructuring assignment( 비구조화 할당 )  (0) 2019.07.12
Java Assertion  (0) 2019.07.12
Singletone Design Pattern  (0) 2019.01.30
Adapter Design Pattern  (0) 2019.01.30
Spring Boot internationalization  (0) 2019.01.30

댓글