2017-01-10 3 views
0

IDE : Android Studio 2.2.2 | Jmockit : 2.1 | Java : 1.8.0_102-b14Jmockit : net.android.Uri 클래스의 toString 메소드를 조롱 할 수 없습니다.

클래스 net.android.Uri의 toString() 메소드를 조롱했습니다. 이 클래스의 모든 메소드는 OK를 모의하지만 toString() 메소드를 모의 할 수 있습니다.

@Test 
public void method(@Mocked final Uri uri) throws Exception { 
    new NonStrictExpectations() { 
      { 
       uri.getHost(); 
       result = "sendViewLog"; 
       uri.getAuthority(); 
       result = "getAuthority"; 
       uri.getEncodedFragment(); 
       result = "getEncodedFragment"; 
       uri.getPort(); 
       result = 8080; 
       uri.toString(); // <------- 
       result = "helloWorld"; 
      } 
     };  

    sut.method(); 
} 

결과 : 그러나 toString()가 null 값을 반환하는 모든 방법은 위의 조롱했다. 몇 가지 해결책을 제시해 주시겠습니까?이 문제를 해결하십시오.

PS1 : Expectations 블록 내에서 toString 메소드로 마우스를 가져 가면 깨달았습니다. 이 경고 메시지를 표시합니다.

해당 호출 결과가 인 특정 메소드에 대한 호출을보고합니다. 검사 설정에서 지정한 방법과 org.jetbrains.annotations.Contract (pure = true) 주석이있는 방법은 모두 입니다. 많은 메소드에서, 결과를 무시하는 것은 완벽하게 이지만, 일부 메소드의 경우에는 거의 확실한 오류입니다. 호출의 결과를 무시하는 것이일 가능성이있는 메소드의 예로는 실제로 읽힌 바이트 수인 바이트를 리턴하는 java.io.inputStream.read(), java.lang.String 또는 java의 메소드 .math.BigInteger는 모든 메소드가 부작용이없고 이므로 무시하면 무의미합니다.

PS2 : 내가 URI 인스턴스에 의해 NULL 체크 , 그것은 전달합니다. 는하지만, 검사 할 클라이언트 코드가 uri.toString()입니다. ("/ 비디오") 원인 uri.toString() == null이 포함되어 있으므로 는 ("/ 비디오")을 포함 NullPointerException를 throw합니다. 개발자의

답변