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) でアノテートされたメソッド がチェックされます。多くの方法では、結果を無視することは完全に ですが、いくつかの方法ではほとんど間違いです。 呼び出し結果を無視する可能性のあるメソッドの例は、エラーである可能性があります。実際に読み込まれた バイト数、java.lang.Stringまたは javaのいずれかのメソッドを返すjava.io.inputStream.read()がエラーになります。 .math.BigInteger。これらのメソッドはすべて副作用がなく、無視されると無意味なので です。
PS2:私は、URIインスタンスによってはnullチェック は、それが渡されます。そうは( "/ビデオ")を含んで しかし、私は確認したいクライアントからのコードは、(uri.toStringである)。( "/ビデオ")が含まれ 原因uri.toString() == nullで、 NullPointerExceptionをスローします。開発者から