2010-01-26 4 views
5

JUnit 3을 사용하고 있으며 객체가 올바르게 작성되었는지 테스트해야하는 경우가 있습니다. 내 생각은 아래 그림과 같이 클래스 MyTestBase을 작성한 다음 상황 별 단위 테스트에서이를 확장했습니다.JUnit 기본 클래스를 확장하고 해당 클래스에서 테스트를 실행하십시오.

그러나 위의 예제에서 MyTestsMyTestBase의 테스트를 실행하지 않습니다.

public class MyTestBase extends TestCase { 
    protected String foo; 
    public void testFooNotNull() { 
    assertNotNull(foo); 
    } 
    public void testFooValue() { 
    assertEquals("bar", foo); 
    } 
} 


public class MyTests extends MyTestBase { 
    public void setUp() { 
    this.foo = "bar"; 
    } 
    public void testSomethingElse() { 
    assertTrue(true); 
    } 
} 

내가 뭘 잘못하고 있니?

업데이트 사과. 어리석은 오류. 내 기본 클래스의 테스트 이름이 올바르게 지정되지 않았습니다.

+0

junit 4를 사용하지 않는 이유는 무엇입니까? – Bozho

+1

시스템이 자바 1.4.2로 작성 되었기 때문에 –

+0

나는 그저 잘못된 것이므로 질문을 끝내기로 결심했다. 그것은 진짜 질문을하지 않습니다. –

답변

4

"MyTests가 MyTestBase에서 테스트를 실행하지 않습니다."라고 말씀하셨습니다. 나는 그것을 시도하고 MyTestBase에있는 것을 포함하여 모든 테스트가 호출되었다.

+0

JUnit 3을 사용해 보셨습니까? – Bozho

+0

예, JUnit 3을 사용하여 Eclipse에서 시도했습니다. MyTests 클래스를 JUnit 테스트로 실행했으며 모든 테스트가 성공적으로 통과되었습니다. –

+0

좋은. 그러면 질문은 부적합합니다 :) – Bozho

2

음, MyTestBase을 추상화하여 기본 클래스에서 테스트를 실행하지 않도록 할 수 있습니다. 더 나은 해결책은 기본 클래스에 setUp을 갖고 나중에 필요한 변수를 초기화하기 위해 추상 메소드 (예 : getFoo())를 호출하는 것입니다.

실제로 이러한 추상적 인 방법을 사용하는 경우 처음부터 설정 단계조차 필요하지 않을 수도 있습니다. 인스턴스 변수를 사용하는 대신 값이 필요한 곳에 추상적 방법을 호출 할 수 있습니다 . 분명히 그것은 정확한 상황에 달려 있지만, 많은 경우에 이것은 훨씬 더 깨끗할 수 있습니다.

0

은 당신이 할하려는 당신의 목표를 달성하기 위해 가장 적절한 방법이 아니다 :

당신이

  • 유틸리티 클래스를 정의하는 몇 가지 검사를하게 일반적인 기능을 가지고 싶다면,에 static 방법
  • 는 슈퍼 클래스에 정의하고 내가 당신이 원하는 정확히 모르는
0

각 시험 방법에서 호출하지만, 유 일반적으로 테스트에 너무 많은 공통 부분을 사용하는 것은 좋지 않습니다. 왜냐하면 공통 부분이 실패하면 많은 수의 테스트를 거치기 때문에 소프트웨어에 하나의 작은 버그 만있을 수 있기 때문입니다.

복잡한 객체를 생성하고 그 객체를 올바르게 생성하기 위해 팩토리 또는 빌더를 테스트하기 위해 팩토리 또는 빌더를 사용하는 것이 좋습니다.