在测试期间使用Mockito模拟我的课程中的一种方法

时间:2015-11-19 11:00:23

标签: android unit-testing junit mockito

我正在尝试使用JUnit和Mockito为Android编写单元测试( 已检测)。

某些情况:我正在测试一个严重依赖于视图的类,我不能/不想在测试期间实际膨胀视图。有一次,我的class-to-test想要使用视图的宽度,我已经定义了一个(公共)方法,该类用于在运行时获取宽度(waitpid)。

在我的测试中,我想使用Mockito来模拟getWidth()方法。 (虽然让其他人的行为方式相同)。只是为了澄清:我的类中的一个方法调用getWidth(),我希望它在测试期间返回一个模拟值。

所以我尝试使用getWidth()方法实例化Class,但我不知道这是否是正确的方法(它不起作用)或者我还应该做些什么

我目前的代码:

Mockito.spy()

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

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

2 个答案:

答案 0 :(得分:5)

我通过从此

更改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-dependencies只能与androidTestCompile - 标签一起使用。

答案 1 :(得分:3)

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

  1. 您可能还需要在Adil Hussain中发布this SO answer进行一些手动配置:

    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禁用所有行为(包括调用实际方法)并仅使用方法调用来识别方法。 / p>