我正在尝试使用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);
答案 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)
你的间谍语法是正确的,但你有两个危险:
您可能还需要在Adil Hussain中发布this SO answer进行一些手动配置:
System.setProperty(
"dexmaker.dexcache",
getInstrumentation().getTargetContext().getCacheDir().getPath());
小心
Mockito.when(graph.getGraphWidth()).thenReturn(400);
...包含对:
的调用 graph.getGraphWidth()
Mockito会在打断之前打电话给你。这可能适用于此调用,但在实际方法调用将引发异常的情况下,Mockito.when
语法无效。相反,请使用doReturn
:
Mockito.doReturn(400).when(graph).getWidth();
请注意,对when
的调用仅解决图形,而不是整个方法调用,这允许Mockito禁用所有行为(包括调用实际方法)并仅使用方法调用来识别方法。 / p>