2012-04-22 5 views
2

나는 Junit을 사용하기 시작하는데, 나는 아주 기본적인 질문을 가지고있다.Java-Junit/구현되지 않은 테스트 코드

rateTrans 방법을 확인하고 싶습니다. 아직 구현하지는 않지만 구현하기 전에 테스트를 작성하고 싶습니다. 나는이 방법이 어떤 논증을하는지 알았다.

import org.junit.Assert.*; 
import junit.framework.*; 

public class testing extends TestCase { 

    public void testAdd(){ 
    assertTrue(rateTrans("1223",1,2,3,4,"blabla")); 
    assertTrue(rateTrans("1223",1,2,3,4,"")) ; 
    assertFalse(rateTrans("1223",7,2,3,4,"blabla")); 
    } 
} 

그것은 나에게 다음 문제를 제공합니다 : The method rateTrans(String, int, int, int, int, String) is undefined for the type testing

그래서 나는 다음 클래스를 썼다.

내가 뭘 잘못 했니?

+2

Java와는 관계가 없지만 일반적으로 Java의 클래스 이름은 대문자로 시작합니다 (http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-135099.html#367 참조). JUnit의 경우 테스트 클래스 이름이 테스트 할 클래스의 이름으로 시작하여 'Test'라는 단어로 끝납니다 (따라서'RateManagerTest'는'RateManager'에 대한 테스트입니다) – NamshubWriter

답변

3

그냥 반환 값 (물론,이 경우 false이 될 수있는 좋은 선택)와 같은 빈 몸과/또는 null으로 구현 :

protected boolean rateTrans(String, int, int, int, int, String) { 
    // TODO: implement me! 
    return false; 
} 

축하합니다, 당신은 TDD를하고있어! 일단 모든 테스트를 구현하면 메소드 자체를 구현할 수 있습니다. 그때까지는 부울 반환 값으로 인해 일부 테스트가 녹색 일 수 있고 나머지는 빨간색 일 수 있습니다.

+0

이를 수행하기 위해 varargs를 사용하면 vararg가 메소드 서명의 마지막 변수가 아닌 경우와 같은 제한 사항. –

+0

Adam이 필요로하는 서명을 알지 못하기 때문에이 샘플에서는 varargs를 사용하기로했습니다. 어쨌든 그것은 Adam에게 좋은 힌트입니다. – spidey

+0

서명 서명이 알려져 있다고 명시되어 있습니다. 게다가 "거짓"과 같은 임의의 값을 반환하는 것은 일반적으로 나쁜 생각입니다. –

5

중 하나 TDD 환경에서 또는 IDE가 인터페이스에서 클래스를 생성 할 때, 같은 UnsupportedOperationException으로 예외를 발생하는 것입니다, 임시 구현을 만드는 나의 선호하는 방법 :

boolean rateTrans(String firstStr, int firstInt, int secondInt, int thirdInt, int fourthInt, String secondStr) { 
    // TODO: implement me! 
    throw new UnsupportedOperationException("Not yet implemented"); 
} 

이유를 던지는 null, false, 0, "", Collections.empyList() 또는 그와 유사한 잠재적 유효 값을 반환하는 대신 예외가 발생한다는 것은 사실상 작동 구현이 없다는 것이 매우 분명하다는 것입니다. 그렇지 않으면, 일시적인 해결책을 잊어 버리고 사람들이 올바르게 구현되었다고 가정하고 그것을 사용하기 시작할 가능성이 있습니다.

편집 : 매개 변수 목록을 추가했습니다.

+1

임시 구현을 할 때, 예, 그렇다면'UnsupportedOperationException'이 최선책입니다. 그러나! 테스트를 처음 작성할 때 실용적인 차이는 거의 없습니다. 테스트가 실패합니다. 모든 테스트가 임시 구현으로 성공하면 테스트가 명백히 잘못되거나 많은 테스트를 놓치게됩니다. 실용적인 차이는 거의 없습니다. 테스트가 실패 (캐치되지 않는 예외가 없음)되거나 중단 (캐치되지 않은 예외가 있음)하는 것을 선호하는 경우입니다. – spidey

+0

TDD는 구현이 채워지기 전에 테스트가 작성되었음을 의미합니다. 테스트 사례가 작성되기 전에 메소드 서명이 이미 결정되어 있어야합니다.구현 클래스에 일시적 varargs 메소드 서명 메소드가있는 것은 잘못된 것입니다. –

+0

단위 테스트를 만족시키기 위해 @spidey가 이와 같은 정당한 상황에서 임의의 값에 대해 UnsupportedOperatiomException을 저 지르면 잘못되었습니다. –

1

구현을 제공하지 않은 방법으로 UnsupportedOperationException을 던집니다. 이것은 임의의 값을 반환하는 것보다 훨씬 낫습니다. 나는. false 또는 true