我还没有找到任何关于如何执行此操作的示例。我假设基于这样的例子这是不可能的:
@Bean(MyImplementation.class)
MyInterface myInterface;
其中要注入的类已经确定。
的补充johncarl answer:
无法告诉 AndroidAnnotations 您想要注入模拟而不是真实对象,因为它在编译时工作,因此代码必须始终为生产做好准备。
我建议测试生成的活动,作为补充机器人电动。注释正在向您的代码添加行为,因此您不应该像没有注释一样测试它。
请小心测试您的 Activity 行为,而不是 AndroidAnnotations 的行为。该框架已经有自己的测试来检查注释是否正常工作:)。
-
您可以让 AndroidAnnotations DI 发生,然后重新注入模拟的依赖项。这些字段至少具有默认范围,这意味着可以从同一包访问它们,因此您必须在与活动相同的包中创建测试。
MyActivity_ activity = new MyActivity_();
// myInterface gets injected
activity.onCreate(null);
// you reinject myInterface
activity.myInterface = Mockito.mock(MyInterface.class);
在AndroidAnnotations中,依赖项是通过调用注入的MyImplementation_.getInstance_()
。您可以使用运行时字节码操作工具,例如电源模拟 http://code.google.com/p/powermock/让getInstance_()
的方法MyImplementation_
返回一个模拟。不过,这可能需要一些初始工作,因为您必须混合使用 PowerMock 测试运行程序和 Robolectric 测试运行程序。
编辑:我更新了文档 https://github.com/excilys/androidannotations/wiki/Unit-test-your-application基于这个问题的内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)