Jmockit:无法模拟net.android.Uri类

时间:2017-01-10 04:52:42

标签: java android junit jmockit

IDE:Android Studio 2.2.2 | Jmockit:2.1 | Java:1.8.0_102-b14

我试图模拟类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上的任何方法   java.math.BigInteger,因为所有这些方法都是无副作用的   如果被忽视就毫无意义。

PS2: 当我通过uri实例检查null时,它会通过。 但是,我要检查的客户端代码是 uri.toString()。contains(“/ video”) 原因 uri.toString() == null,因此 contains(“/ video”)会抛出NullPointerException。

1 个答案:

答案 0 :(得分:0)

开发人员的回答:

  

是的,只能实现(使用正文,而不是抽象)toString()方法。

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