ste*_*mit 37 android mockito dexmaker
我想在我的Android项目中使用Mockito.我找到了非常好的教程来处理它:http://www.paulbutcher.com/2012/05/mockito-on-android-step-by-step/
基本上它使用新版本的Mockito + Dexmaker,一切都按预期工作.
但是,当我尝试模拟一些Android特定对象时,即:
Context context = mock(Context.class);
Run Code Online (Sandbox Code Playgroud)
我收到这个例外:
java.lang.IllegalArgumentException:
dexcache == null (and no default could be found;
consider setting the 'dexmaker.dexcache' system property)
at com.google.dexmaker.DexMaker.generateAndLoad(DexMaker.java:359)
at com.google.dexmaker.stock.ProxyBuilder.buildProxyClass(ProxyBuilder.java:252)
at com.google.dexmaker.mockito.DexmakerMockMaker.createMock(DexmakerMockMaker.java:54)
at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:26)
Run Code Online (Sandbox Code Playgroud)
知道怎么解决吗?
Adi*_*ain 33
从@ rjath对@ MrChaz回答的评论来看,这对我来说效果更好:
System.setProperty(
"dexmaker.dexcache",
getInstrumentation().getTargetContext().getCacheDir().getPath());
Run Code Online (Sandbox Code Playgroud)
我把它放在我的setUp()方法中.
MrC*_*haz 10
我已经设法拼凑了一个似乎对我有用的修复程序.我在清单中添加了读写外部存储.为了测试,我加入System.setProperty("dexmaker.dexcache", "/sdcard");了测试.我在模拟器图像中添加了一张SD卡.
我相信这是有效的,因为默认情况下mockito尝试使用apps缓存目录,但我从未运行过活动所以我怀疑该目录永远不会被OS创建
所以问题在于Dexmaker无法像其他人提到的那样在Android> = 4.3上找到缓存路径,并且正如此dexmaker问题所述.
我在自定义的仪表化测试运行器中实现了变通方法,而不是在每个测试(或它们的超类)中setUp(),因为它感觉不那么hacky(它实际上只在一个地方 - 而不是在每个子类中继承)并且更灵活.为了便于记录,这些是必要的更改:
public class CustomInstrumentationTestRunner extends InstrumentationTestRunner {
@Override public void onCreate (final Bundle arguments) {
super.onCreate(arguments);
// temporary workaround for an incompatibility in current dexmaker (1.1) implementation and Android >= 4.3
// cf. https://code.google.com/p/dexmaker/issues/detail?id=2 for details
System.setProperty("dexmaker.dexcache", getTargetContext().getCacheDir().toString());
}
}
Run Code Online (Sandbox Code Playgroud)
并设置您的项目(或测试项目),以便在AndroidManifest.xml使用ant构建时使用此类作为检测的测试运行器:
<instrumentation
android:name="my.package.CustomInstrumentationTestRunner"
android:targetPackage="my.target.package" />
Run Code Online (Sandbox Code Playgroud)
或者build.gradle用gradle建造时:
android {
defaultConfig {
// ...
testInstrumentationRunner 'my.package.CustomInstrumentationTestRunner'
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
如果您有其他instrumentation条目,则可以在命令行上切换它们,也可以在IDE运行配置中选择一个条目.
| 归档时间: |
|
| 查看次数: |
15815 次 |
| 最近记录: |