Structured data
- Category
- Programming
JUnit assert관련 Method 표 #
Method |
내용 |
assertArrayEquals(a,b) |
객체 a와 b의 값 같은지 확인 |
assertSame(a,b) |
객체 a와 b가 같은 객체임을 확인 |
assertTrue(a) |
a가 참(true) 확인 |
assertFalse(a) |
a가 거짓(false) 확인 |
assertNotNull(a) |
a 객체가 Null이 상태 확인 |
- setUp() : 테스트 대상 클래스의 실행 전에 가장 먼저 setUP()을 실행한다.
- ex) DB 및 서버 네트워크 환경 연결 시 활용
- tearDown() : 가장 마지막에 수행되며 setUp()의 반대 개념으로 생각하면 된다.
- ex) DB 및 서버 네트워크 환경 연결 종료 시 활용
- 각 테스트 코드 실행 시 setUp , tearDown 반복 실행한다.
JUnit 지원 어노테이션(Annotation) #
어노테이션 |
내용 |
@Test |
@Test가 선언된 메서드는 테스트를 수행하는 메소드 |
@Ignore |
@Ignore가 선언된 메서드는 테스트를 실행되지 않음 |
@Before |
@Test 메소드에서 공통으로 사용하는 코드를 @Before 메소드에 선언하여 사용 |
@After |
@Test 메소드 사용 후 자원을 해제할 때 사용 |
@BeforeClass |
@Test 메소드 보다 먼저 한 번만 수행되어야 할 때 사용 |
@AfterClass |
@Test 메소드 보다 나중에 한 번만 수행되어야 할 때 사용 |

그림1 JUnit Flow 예시 (출처: (https://nesoy.github.io/articles/2017-02/JUnit))
Junit Rules의 활용 #
- Junit Rules은 테스트 코드 작성 시 단위테스트를 위한 사전 작업으로 Junit에서 제공하는 Rules를 통해 간단하게 활용할 수 있도록 제정 의가 용의 하다.
The Temporary Folder Rule #
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
public class LoadDynamicPropertiesTest {
// 임시 폴더를 생성한다.
@Rule
public TemporaryFolder folder = new TemporaryFolder();
private File properties;
// 테스트 수행 전 test 데이터를 준비한다.
@Before
public void createTestData() throws IOException {
properties = folder.newFile("messages.properties");
BufferedWriter out = new BufferedWriter(new FileWriter(properties));
// Set up the temporary file
out.close();
}
// 테스트에서 해당 임시 폴더를 사용한다.
@Test
public void shouldLoadFromPropertiesFile() throws IOException {
System.out.println(properties.getAbsolutePath());
}
}
- 테스트 전 임시 폴더를 생성하여 테스트 동안의 파일들을 사용한다. (더미 파일 방지)
- 테스트 후 임시 폴더를 삭제해야 한다.
The ErrorController Rule #
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ErrorCollector;
import static org.hamcrest.core.StringContains.*;
import static org.hamcrest.CoreMatchers.not;
public class ErrorCollectorTest {
@Rule
public ErrorCollector collector = new ErrorCollector();
@Test
public void testSomething() {
String result = doStuff();
collector.addError(new Throwable("첫번째 코드의 타입이 다릅니다."));
collector.addError(new Throwable("두번째 코드의 타입이 다릅니다."));
collector.checkThat(result, not(containsString("재시작 하지 않습니다.")));
}
private String doStuff() {
return "재시작 하지 않습니다.";
}
}
- 테스트 중의 발생 에러를 로그로 볼 수 있도록 에러로그 결과 리스트를 만들어준다.
- 테스트 중 에러 발생 시 실행 중단하지 않는다.
The TimeOut Rule #
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.Timeout;
public class TaxCalculatorDataTest {
@Rule
public Timeout globalTimeout = new Timeout(1000);
@Test
public void testSomething() {
System.out.println("테스트1");
}
}
- testSomething () 기능의 Timeout(1000)을 주어 1000ms 시간 안에 테스트 코드가 실행 완료되지 않으면 오류로 간주한다.
The Verifier Rule #
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import java.util.ArrayList;
import java.util.List;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.Verifier;
public class VerifierTest {
private List<String> systemErrorMessages = new ArrayList<String>();
@Rule
public Verifier verifier = new Verifier(){
@Override
protected void verify() throws Throwable {
assertThat(systemErrorMessages.size(), is(0));
}
};
@Test
public void testSomething() {
// ...
systemErrorMessages.add("Test Error 규칙");
}
}
- 코드마다 정해진 조건(룰)을 주어 정해진 조건이 들어오지 않을 시 오류로 간주한다.
The ExternalResource Rule #
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExternalResource;
public static class UsesExternalResource {
Server myServer = new Server();
@Rule
public ExternalResource resource = new ExternalResource() {
@Override
protected void before() throws Throwable {
myServer.connect();
};
@Override
protected void after() {
myServer.disconnect();
};
};
@Test
public void testFoo() {
new Client().run(myServer);
}
}
- 외부 자원(파일, 소켓, DB커넥션 등) 관리에 쓰이며 @Before, @After과 별 차이가 없으나, 특정 자원이 다른 테스트에서 재사용성이 요구될 경우 유용하다.
관련 페이지 #
spring/Spring Test,JUnit
Incoming Links #
Related Data Sciences (DataScience 0) #
Suggested Pages #