2017-12-26 24 views
0

나는 쌍을 이루는 void 메소드의 클래스가 있습니다. 각 메소드에는 동일한 조작을 수행하지만 다른 방식으로 수행해야하는 동일한 메소드가 있습니다. 예를 들어 :두 개의 void 메소드가 동일하게 수행하는 경우 Java 테스트

public void example1_1(){ 
    Integer i = new Integer(1); 
} 

public void example1_2(){ 
    Integer i = Integer.valueOf(11); 
} 

또는

public void example2_1(){ 
    String result = "hello"; 
    for (int i = 0; i < 10; i++) { 
     result += result; 
    } 
} 

public void example2_2(){ 
    StringBuffer result = new StringBuffer("hello"); 
    for(int i = 0; i < 10; i++) { 
     result += result; 
    } 
} 

가 어떻게 방법이 실제로가 쌍에서 같은 작업을 수행하는지 테스트 할 수 있습니까?

+2

두 개의 프로그램이 동일한 함수를 계산하면 이론적 인 관점에서 결정할 수 없습니다 (일반적으로). 그리고 예제 함수는 시간을 낭비하는 것보다 아무것도하지 않습니다. 반환 된 결과 또는 다른 부작용이 없습니다. – Albjenow

+0

당신은 어떤 방법으로 수행되었는지 추적 할 수 없으며 결과가 없으므로 다른 방법과 유사합니다. 두 가지 방법 모두의 "결과"는 어디에도 저장되지 않으므로 실제로 수행되었다는 것을 예측할 수 없습니다. 컴파일러는 바이트 코드로부터 멀리 던질 수도 있습니다. –

답변

0

반환 값이 없음을 유의하십시오. 그것은 계획대로 진행되는 것 같습니다.

'동일한 것을 수행하는 메소드'를 정의하는 것은 매우 어렵습니다. 결과 만 고려하고 있습니까? 그렇다면 반환 값을 확인하는 것이 아니라 '무효화'되는 이유는 무엇입니까? 실적이 현명한 것을 의미합니까? 복잡성이 현명합니까? 당신이 요구할 수있는 '같은'수준의 여러 단계가 있습니다.

반복을 통해 N 번 호출 된 메서드인지 확인하려면 Mockito verify 메서드를 사용합니다. 예를 들어 myMethod()가 한 번만 호출되었다는 것을 확인할 수 있습니다.

verify(myClass, times(1)).myMethod(); 

결과가 동일하다는 것을 확인하기 위해 반환 값을 사용하는 것이 좋습니다.

더 넓은 접근 방식에서, 하나는 OOP 프로그래밍 및 특정의 인터페이스 방식의 일부를 주장 할 수는 방법은 그것만큼 제대로 그것을처럼, 을 무엇을 어떻게하는지 정말 문제 의하지 않는다는 것입니다 즉, 메소드가 반환해야하는 것이면, 내부 구현은 부적합합니다. 이전에 제안한 것과 같이 단위 테스트를 사용하여 정확성을 확인할 수 있습니다. 반환 값과 많은 단위 테스트를 사용하여 다양한 입력의 정확성을 확인하십시오.