일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- chatGPT's answer
- 역학
- 인프라
- flet
- kotlin
- oracle
- android
- 웹 크롤링
- 자바암호
- write by chatGPT
- Database
- NIO
- Java
- 유닉스
- write by GPT-4
- 소프트웨어공학
- spring data jpa
- 코틀린
- 파이썬
- 데이터베이스
- jpa
- JVM
- spring integration
- 고전역학
- 자바네트워크
- 시스템
- python
- 자바
- 리눅스
- GPT-4's answer
- Today
- Total
기억을 지배하는 기록
JUnitParams 본문
예전에 TestNG을 사용하면서 JUnit보다 발전된 단위 테스트 도구라고 생각했었습니다. 2가지 큰 차이가 있었는데
1. Test Annotation 지원(JUnit에서 지원하기 전부터)
2. Test Parameter 지원(Test을 위한 Data Set을 정해두고 Parameter로 전달 할수 있었음.)
1. 번은 현재 JUnit에서 지원하고 있지만 2 번은 아직 미지원되고 있습니다. 하지만 여기 “JunitParams” Project가 있군요. JUnit 4.5 이상부터 지원된다고 합니다.
Maven Dependency
<dependency>
<groupId>pl.pragmatists</groupId>
<artifactId>JUnitParams</artifactId>
<version>0.3.0</version>
<scope>test</scope>
</dependency>
Sample Code
1. 가장 간단한 구성
package test.junitparams; public class Person { private int age; public Person(int age) { this.age = age; } public boolean isAdult() { return age >= 18; } @Override public String toString() { return "Person of age: " + age; } } package test.junitparams; import junitparams.JUnitParamsRunner; import junitparams.Parameters; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @RunWith(JUnitParamsRunner.class) public class PersonTest { @Test @Parameters({ "17, false", "22, true" }) public void personIsAdult(int age, boolean valid) throws Exception { Assert.assertEquals(new Person(age).isAdult(), valid); } } |
“@RunWith(JUnitParamsRunner.class)” Annotation으로 JUnitParams을 사용할수 있게 지정
Test Method에 “@Parameters” Annotation에 Test Parameter을 지정해 줍니다.
2. Test Parameters 외부 Method에 지정
@Test @Parameters(method = "adultValues") public void personIsAdult2(int age, boolean valid) throws Exception { Assert.assertEquals(valid, new Person(age).isAdult()); } private Object[] adultValues() { return $( $(13, false), $(17, false), $(18, true), $(22, true) ); } public static Object[] $(Object... params) { return params; } |
Test Date을 생성하는 adultValues Method을 만들고 “@Parameters”에서 Method를 지정합니다.
3. Test Parameters 외부 Method 자동 지정
@Test @Parameters public void isAdult(Person person, boolean valid) throws Exception { Assert.assertEquals(person.isAdult(),valid); } private Object[] parametersForIsAdult() { return $( $(new Person(13), false), $(new Person(17), false), $(new Person(18), true), $(new Person(22), true) ); } public static Object[] $(Object... params) { return params; } |
Test Data을 생성하는 Method를 “parametersFor+[Test Method 이름]”으로 지정하면 Runtime시에 자동 지정됩니다.
4. 외부 Class에 있는 Test Parameters
@Test @Parameters(source = PersonProvider.class) public void personIsAdult3(Person person, boolean valid) { Assert.assertEquals(person.isAdult(),valid); } package test.junitparams; public class PersonProvider { public static Object[] provideAdults() { return $( $(new Person(25), true), $(new Person(32), true) ); } public static Object[] provideTeens() { return $( $(new Person(12), false), $(new Person(17), false) );
} public static Object[] $(Object... params) { return params; } } |
Test Data을 외부 Class에 정의해두고 Test Method에서 지정하여 사용할수 있습니다.
Conclusion
JUnit을 사용하다보면 Test Data을 정의하는데 잔 손이 많이 갑니다. 하지만 아주 적당한 Plug-in이 나온 것 같습니다.
지금까지의 수준의 TestNG을 넘어서지 못하였지만 아직 버전은 0.3!
앞으로 많이 발전이 있으면 좋겠습니다.
'오래된글 > Java' 카테고리의 다른 글
Nail 이미지 생성 클래스 (0) | 2018.04.09 |
---|---|
Lessons learned from getting .NET to REST with Java (0) | 2018.04.09 |
JNI Hello World Program (0) | 2018.04.09 |
JMX-Communication with Notifications (0) | 2018.04.09 |
JMS - 기초 (0) | 2018.04.09 |