Jmockit:不能模拟net.android.Uri类的toString类

问题描述:

IDE:Android Studio 2.2.2 | Jmockit:2.1 | Java:1.8.0_102-b14Jmockit:不能模拟net.android.Uri类的toString类

我试图模拟方法toString()的类net.android.Uri。这个类的所有方法都可以模拟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()返回空值,所有上述方法被嘲笑。 你能否给我一些解决方法解决这个问题。

PS1: 我意识到当我将鼠标悬停在Expectations块内的toString方法时。它显示此警告消息:

将所有呼叫报告给特定方法,忽略该呼叫的结果 。在检查的设置和 方法中指定的两种方法都会被检查,org.jetbrains.annotations.Contract(纯粹= true) 。对于很多方法,忽略结果是合理的,但对于某些方法来说,这几乎肯定是一个错误。 忽略调用结果的方法示例很可能是 是一个包含java.io.inputStream.read()的错误,它返回 实际读取的字节数,java.lang.String上的任何方法或者 java .math.BigInteger,因为所有这些方法都是无副作用的,因此如果被忽略,这样毫无意义。

PS2: 当我检查由URI实例为null,它传递。 但是,从客户端,我想检查代码uri.toString()。包含( “/视频”) 原因uri.toString() == NULL,所以包含( “/视频”)抛出NullPointerException。从开发商

答:

是的,只有实现(与身体,而不是抽象)的toString()方法可以嘲笑。

https://github.com/jmockit/jmockit1/issues/381