JUnit의 적절한 사용 (또는 적어도 설명서)이 매우 혼란 스럽습니다. 이 질문은 향후 참조 및 실제 질문으로 사용됩니다.JUnit 혼동 : 'extends TestCase'또는 '@Test'를 사용 하시겠습니까?
내가 제대로 이해했다면, 작성하고 JUnit 테스트를 실행하는 두 가지 방법이 있습니다 : 시험 방법을가의 TestCase를 확장하는 클래스를 작성하고 시작합니다
접근법 A (JUnit을 3 스타일) 단어는 test
입니다. Eclipse에서 JUnit Test로 클래스를 실행하면 test
이라는 단어로 시작하는 모든 메소드가 자동으로 실행됩니다.
import junit.framework.TestCase;
public class DummyTestA extends TestCase {
public void testSum() {
int a = 5;
int b = 10;
int result = a + b;
assertEquals(15, result);
}
}
접근 B (JUnit을 -4- 스타일)는 '정상'클래스를 작성하고 상기 방법에 주석을 붙일 @Test
. 단어 test
으로 메소드를 시작할 필요는 없습니다.
import org.junit.*;
import static org.junit.Assert.*;
public class DummyTestB {
@Test
public void Sum() {
int a = 5;
int b = 10;
int result = a + b;
assertEquals(15, result);
}
}
두 가지를 혼용하는 것은 좋지 않은 것처럼 보입니다. this stackoverflow question :
이제 내 질문 (들) :
- 가 선호하는 방식 무엇입니까, 또는 때 대신 다른 중 하나를 사용해야합니까?
- 접근 방식 B는
@Test(expected = ArithmeticException.class)
과 같이 @Test 주석을 확장하여 예외를 테스트 할 수 있습니다. 그러나 접근법 A를 사용할 때 예외를 테스트하려면 어떻게해야합니까? 방법 A를 사용하는 경우, 그룹화 할 수 있습니다 이런 테스트 스위트의 테스트 클래스의 수 :
suite.addTestSuite(DummyTestA.class);
suite.addTestSuite(DummyTestAbis.class);
TestSuite suite = new TestSuite("All tests");
그러나 이것은 (접근 B와 함께 사용할 수 없습니다 각 테스트 클래스는 TestCase를 서브 클래스 화해야하기 때문에). 접근법 B의 테스트를 그룹화하는 적절한 방법은 무엇입니까?
편집 : 나는에의 JUnit 버전을 추가 한 모두 내가 좀 더 유연하게 찾을 수 있기 때문에 내가 JUnit 4에서는 (주석 방식)에 대한 선호가
유용하고 철저한 답변이지만 "예외 메시지 확인"을 완전히 이해하지 못했습니다. 하드 코딩 된 문자열을 확인하는 것은 유지 보수의 악몽이 될 것입니다. "특정 예외 유형의 등록 정보 확인"을 의미해야합니다. – thSoft
@thSoft : 자주 사용되는 것은 아니지만 때로는 예를 들어 예외 필드에 해당 예외 필드가 포함되도록하고 싶습니다. 그런 다음 간단한'assertTrue (e.getMessage(). contains ("foo"))'가 유용 할 수 있습니다. –
JUnit4조차도 메시지 나 예외의 다른 속성 (원인 등)을 확인해야 할 때 중요한 관용구입니다. 'expected' 메쏘드는 타입을 검사합니다. – Yishai