2017-01-10 7 views
0

IDE:Androidスタジオ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) でアノテートされたメソッド がチェックされます。多くの方法では、結果を無視することは完全に ですが、いくつかの方法ではほとんど間違いです。 呼び出し結果を無視する可能性のあるメソッドの例は、エラーである可能性があります。実際に読み込まれた バイト数、ja​​va.lang.Stringまたは javaのいずれかのメソッドを返すjava.io.inputStream.read()がエラーになります。 .math.BigInteger。これらのメソッドはすべて副作用がなく、無視されると無意味なので です。

PS2:私は、URIインスタンスによってはnullチェック は、それが渡されます。そうは( "/ビデオ")を含んで しかし、私は確認したいクライアントからのコードは、(uri.toStringである)。( "/ビデオ")が含まれ 原因uri.toString() == nullで、 NullPointerExceptionをスローします。開発者から

答えて