gpt4 book ai didi

java - 我可以对 Activity 和 Services 等 Android 组件使用控制反转吗?

转载 作者:行者123 更新时间:2023-11-30 09:22:37 25 4
gpt4 key购买 nike

为了促进更清晰的测试,我想在开发我的 Android 应用程序时使用控制反转。使用普通 Java 对象看起来很简单,但是当我想用模拟数据为我的 ActivityService 播种时,事情开始看起来有问题,因为我没有能够将这些组件的依赖项传递给它们的构造函数。

举个例子,假设我想让我的 Activity 在正常使用期间使用真实的 HttpUrlConnection,但是为了测试,我想让它使用模拟的 HttpUrlConnection 实际上并没有连接到互联网。有没有一种方法可以通过 IoC 为 Activity 完成此操作?

我知道有依赖注入(inject)选项(例如 Factories)和库(例如 Dagger)可以帮助我,但我很好奇是否还有其他方法可以实现这一点。

最佳答案

由于服务或 Activity 的构造函数注入(inject)在 Android 中是不可能的,因为这些类是由 Android 运行时使用无参数构造函数实例化的,因此您需要某种工厂来为您创建外部对象。为了解决这个问题,我会创建一个工厂接口(interface),它可以有一个像这样的模拟实现:

public class MyService : Service {
public static IFactory myFactory = new MyFactory();
// the non-mocked version used as Default

void myLocalFunction() {
...
HttpUrlConnection connection = myFactory.createHttpUrlConnection();
...
}
}


public MyServiceTest : ... {
class MyMockedFactory : MyFactory {
HttpUrlConnection createHttpUrlConnection(){return new MockedHttpUrlConnection();}
}

public myTest() {
MyService.myFactory = new MyMockedFactory();
.... do the test ...
}
}

关于java - 我可以对 Activity 和 Services 等 Android 组件使用控制反转吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16436112/

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