2009-09-15 1 views
7

그래서 내가 좋아하는 무언가를 보이는 클래스가 다음단위 테스트 오버로드 된 함수는 어떻게합니까?

가있는 DbParameter 등 서버, DBNAME, DBTYPE 지금

같은 속성이 모두 포함 된 간단한 값 클래스가

public class MyClass 
{ 

    DatabaseDependency _depend; 

    public MyClass(DatabaseDependency depend) 
    { 
     _depend = depend; 
    } 

    public string DoSomething(DBParameter database) 
    { 
     var result = _depend.GetResults(database, ...); 
     string response = String.Empty;   

     // some logic to process the result 

     return response; 
    } 

} 

, 내가 추가 할 DBParameter 매개 변수 대신 연결 문자열을 받아들이도록 DoSomething에 과부하 (DatabaseDependency에 이미 연결 문자열을 허용하는 GetResults 오버로드가 있다고 가정).

내 질문 : DatabaseDependency.GetResults의 결과를 처리하는 데 사용되는 다양한 논리 경로를 설명하는 몇 가지 단위 테스트가 있습니다. DoSomething에 과부하를 추가하면 본질적으로 코드를 리팩토링하여 두 오버로드에서이 로직을 재사용 할 수 있습니다 (즉, 아마 개인 메소드로 이동). 이것에 대해 단위 테스트를하는 올바른 방법은 무엇입니까? 내가 추가하고있는 새로운 과부하에 대한 모든 논리 경로를 확인하기 위해 단위 테스트를해야합니다.

답변

5

문자열을 가져 오는 오버로드 된 메서드가 연결 개체로 변환 된 다음 원본에 위임 한 경우 확신하는 경우 하나 이상의 테스트 메서드를 추가해야합니다.

그러나 위임이 수행되지 않도록 기본 오버로드 된 메서드를 리팩토링하면이 작업이 중단됩니다. 이 시나리오에서는 두 방법 모두에 대해 모든 테스트를 복제하는 것이 더 확실하다고 느낄 수 있습니다.

나는 첫 번째 경로가 가장 실용적이라고 생각합니다. 그러나 코드 커버리지 분석을 한 번 실행하는 것이 좋습니다. 그러면 나중에 더 많은 테스트가 필요한지 나중에 알 수 있습니다.

1

예, 개인 처리 방법에 대한 일반적인 처리 방법을 리팩터링합니다. 어쨌든 테스트 고려 사항과 상관없이이 작업을 수행한다고 가정합니다. 중복 코드가 좋지 않습니다. 테스트에 대한 생각이 우리가 올바른 일을하도록 유도하는 것은 흥미 롭습니다.

그러면 각각의 중복 된 초기화 경로에 대해 간단한 테스트를 수행 할 수 있습니다.

5

코드가 현재 보이는대로 유지되면 예 : 해당 테스트 방법을 단위 테스트해야합니다. 본질적으로 테스트 노력을 복제해야합니다.

그러나 하나의 메소드가 단순히 다른 메소드를 호출하도록 기능을 구현하는 것이 합리적이라면, 다른 메소드를 가상으로 만들 수 있습니다. 이렇게하면 가상 메소드가 올바른 값을 가진 다른 메소드에 의해 호출되는지 확인하는 테스트 별 서브 클래스를 작성할 수 있습니다.

즉 하나 개 이상의 단위 테스트에 의해 확인되면, 이제 이 방법이 제대로 다른 메소드를 호출 입증해야하기 때문에 당신은 더 이상 그 방법을 테스트 할 필요가 없습니다, 당신은 당신의 테스트 노력을 집중할 수 있습니다 그 방법에.

0

블랙 박스 또는 화이트 박스 테스트를 수행하는 경우와 응용 프로그램이 두 가지 버전의 방법을 모두 사용하는 경우에 따라 다릅니다.

구현을 테스트한다고 가정한다면 '기본'버전 만 테스트하면됩니다. 제시된 API (javadocs 또는 유사)에 대해서만 알고있는 테스트 작성자의 라인을 생각해 본다면 두 메소드를 완전히 테스트하는 것을 의미하는 API만을 기반으로 테스트해야합니다.

응용 프로그램이 하나의 메소드 만 사용하는 경우, 다른 메소드를 사용 중지하고 사용되지 않는 메소드가 일부 사전 결정된 버전에 여전히 존재할 경우 실패하는 버전 조건 테스트를 작성하십시오. IE : 사용 중지 된 메소드가 언젠가 제거되도록합니다.