我正在尝试编写一个需要两者的测试机器人电动2.2 和电源模拟,因为被测试的代码依赖于一些 Android 库和第三方库以及我需要模拟的最终类。
鉴于我被迫通过以下方式使用 Robolectric 测试运行程序:
@RunWith(RobolectricTestRunner.class)
...我无法使用 PowerMock 测试运行程序,因此我尝试使用 PowerMock java 代理替代方案,但到目前为止还没有运气。
我已经根据设置了一切本指南 https://code.google.com/p/powermock/wiki/PowerMockAgent但我面临着 javaagent 库和 robolectric 所需的类之间的冲突问题,因为它依赖于 asm-1.4。两者都取决于
org.objectweb.asm.ClassVisitor
,但是 javaagent-1.5.1 附带了自己的版本,其中 ClassVisitor 是一个接口,而同一名称空间的 asm-1.4 版本是一个抽象类,在运行时会出现相应的错误:
java.lang.IncompatibleClassChangeError: class org.objectweb.asm.tree.ClassNode has interface org.objectweb.asm.ClassVisitor as super class
我什至尝试修改 javaagent 库 jar 以完全删除其中的 org.objectew.asm 类,但这不起作用,因为随后会发生 ClassNotFoundException,因为 org.objectweb.asm 包中需要一些其他类,而这些类只提供在 javaagent 库 jar 中,而不是在 asm 中。
有任何想法吗?根据现有的示例,该代理似乎至少可以与 Spring 测试运行程序配合良好。
我遇到了同样的问题,虽然我没有解决这个问题,但我想分享我的方法,这消除了对 PowerMock 的需要(在我看来这始终是一件好事):我想模拟对
Fragment fooFragment = new FooFragment();
所以我所做的是添加另一个间接级别。我创建了一个 FragmentProvider 类:
public FragmentFactory fragmentFactory = new FragmentFactory();
[...]
Fragment fooFragment = fragmentFactory.getFooFragment();
完成此操作后,我可以使用标准 Mockito 模拟工厂,如下所示:
FragmentFactory mockFactory = mock(FragmentFactory.class);
activity.fragmentFactory = mockFactory;
when(mockFactory.getFooFragment()).thenReturn(mockFooFragment);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)