为了促进更干净的测试,我想在开发 Android 应用程序时使用控制反转。对于普通的 Java 对象来说,看起来很简单,但是当我想用模拟数据播种我的 Activity 和 Service 时,事情开始看起来有问题,因为我不这样做能够将这些组件的依赖项传递给它们的构造函数。
举个例子,假设我想让我的 Activity
在正常使用期间使用真正的 HttpUrlConnection
,但为了测试,我想让它使用模拟 >HttpUrlConnection
实际上并未连接到互联网。有没有办法通过 Activity
的 IoC 来完成此任务?
我意识到有依赖注入(inject)选项(例如工厂)和库(例如 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 - 我可以对 Android 组件(例如 Activity 和服务)使用控制反转吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16436112/