2

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

例如,假设我想在正常使用期间Activity使用真实HttpUrlConnection的,但为了测试,我想让它使用HttpUrlConnection实际上不连接到互联网的模拟。有没有办法通过 IoC 来实现这一点Activity

我意识到有诸如工厂之类的依赖注入选项,以及诸如 Dagger 之类的库可以帮助我,但我很好奇是否还有其他方法可以实现这一点。

4

1 回答 1

2

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

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 ...
 }
}
于 2013-05-08T10:49:29.250 回答