gpt4 book ai didi

android - 是否可以使用 AndroidAnnotations 注入(inject)模拟以进行测试?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:59:02 25 4
gpt4 key购买 nike

我还没有找到任何关于如何执行此操作的示例。基于这样的例子,我假设这是不可能的:

@Bean(MyImplementation.class)
MyInterface myInterface;

要注入(inject)的类已经确定。

最佳答案

johncarl 回答的补充:

  • 无法告诉 AndroidAnnotations 您想要注入(inject)模拟对象而不是真实对象,因为它在编译时工作,所以代码必须始终准备好生产。

  • 我建议测试生成的 Activity ,以补充 Robolectric。注释正在向您的代码添加行为,因此您不应像没有注释一样对其进行测试。

  • 请注意测试您的 Activity 行为,而不是 AndroidAnnotations 的行为。该框架已经有自己的测试来检查注释是否正常工作:)。

  • 您可以让 AndroidAnnotations DI 发生,然后重新注入(inject)模拟的依赖项。这些字段至少具有默认范围,这意味着可以从同一个包访问它们,因此您必须在与 Activity 相同的包中创建测试。

    MyActivity_ activity = new MyActivity_();

    // myInterface gets injected
    activity.onCreate(null);

    // you reinject myInterface
    activity.myInterface = Mockito.mock(MyInterface.class);
  • 在 AndroidAnnotations 中,通过调用 MyImplementation_.getInstance_() 注入(inject)依赖项。您可以使用 PowerMock 等工具进行运行时字节码操作。让 MyImplementation_getInstance_() 方法返回一个 mock。不过,这可能需要一些初始工作,因为您必须混合使用 PowerMock 测试运行器和 Robolectric 测试运行器。

编辑:我更新了 documentation包含基于此问题的内容。

关于android - 是否可以使用 AndroidAnnotations 注入(inject)模拟以进行测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10464375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com