Dagger 2如何在Android上更轻松地进行测试?

时间:2015-09-09 19:20:13

标签: android unit-testing dependency-injection dagger-2

使用DI的最大好处之一是它使测试变得更容易(What is dependency injection?也支持它)。我使用过的其他编程语言的大多数DI框架( .NET 上的MEF Obj-C / Swift上的Typhoon ,{ {3}} PHP 上的IoC容器,以及其他一些容器)允许开发人员在每个组件的单个入口点上注册依赖项,从而防止“创建”对象本身的依赖。

在我阅读Laravel文档之后,整个“没有反思”的业务听起来很棒,但我没有看到它如何使测试变得更容易,因为对象仍然在创建自己的依赖项。

例如,在CoffeMaker示例中:

public class CoffeeApp {
  public static void main(String[] args) {

    // THIS LINE
    CoffeeShop coffeeShop = DaggerCoffeeShop.create();

    coffeeShop.maker().brew();
  } 
}

即使你没有明确地调用new,你仍然需要创建你的依赖。

现在换一个更详细的例子,让我们转到Dagger 2。 如果您打开DemoActivity课程,您会注意到onCreate实施如下:

@Override 
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
    // Perform injection so that when this call returns all dependencies will be available for use.
   ((DemoApplication) getApplication()).component().inject(this);
}

您可以清楚地看到DI组件与实际代码没有脱钩。总之,您需要在测试用例上模拟/存根((DemoApplication) getApplication()).component().inject(this);(如果可能的话)。

到目前为止,我知道Dagger 2很受欢迎,所以我不会看到它。那么Dagger 2如何让测试课更容易?我将如何模拟,假设我的活动所依赖的网络服务类?我希望答案尽可能简单,因为我只对测试感兴趣。

0 个答案:

没有答案