在使用Mockito进行测试的过程中,模拟了我班上的一个方法



我正试图使用JUnit和Mockito为Android编写一个单元测试(Not插入指令)。

一些上下文:我正在测试一个严重依赖于视图的类,并且我不能/不想在测试期间实际扩展视图。有一次,我要测试的类想要使用视图的宽度,并且我定义了一个(公共)方法,该类在运行时使用该方法来获取宽度(getWidth())。

在我的测试中,我只想使用Mockito来模拟getWidth()方法。(同时让班上的其他同学以同样的方式行事)。澄清一下:我的类中有一个方法调用getWidth(),我希望它在测试期间返回一个模拟值。

因此,我尝试使用Mockito.spy()方法实例化Class,但我不知道这是正确的方法(不起作用),还是我应该做其他事情

我当前的代码:

mGraph = Mockito.spy(new Graph(xAxis, leftAxis, null, false, new Graph.Style(), curve));
Mockito.when(graph.getGraphWidth()).thenReturn(400);

我收到以下错误消息,但我不知道它是相关的还是另一个错误:

java.lang.IllegalArgumentException: dexcache == null (and no default could be found; consider setting the 'dexmaker.dexcache' system property)

我通过更改中的build.gradle解决了这个问题

testCompile ('junit:junit:4.12',
             'com.google.dexmaker:dexmaker-mockito:1.0',
             'com.google.dexmaker:dexmaker:1.0')

到这个

testCompile ('junit:junit:4.12',
             'org.mockito:mockito-core:1.9.5')

我想这可能是因为dex依赖项应该只与androidTestCompile标记一起使用。

您的间谍语法是正确的,但您有两个危险:

  1. 你可能还需要一些手动配置,正如Adil Hussain在这个SO回答中所说:

    System.setProperty(
        "dexmaker.dexcache",
        getInstrumentation().getTargetContext().getCacheDir().getPath());
    
  2. 小心

    Mockito.when(graph.getGraphWidth()).thenReturn(400);
    

    包含对的调用

                 graph.getGraphWidth()
    

    Mockito会在截尾前打电话。这对于这个调用来说可能很好,但在实际方法调用将抛出异常的情况下,Mockito.when语法没有帮助。相反,使用doReturn:

    Mockito.doReturn(400).when(graph).getWidth();
    

    请注意,对when的调用只针对图,而不是整个方法调用,这允许Mockito禁用所有行为(包括调用真实方法),并且只使用方法调用来识别方法。

相关内容

  • 没有找到相关文章

最新更新