重构静态方法调用注入单例的实例上的调用

时间:2014-08-16 15:08:48

标签: java android unit-testing dagger

当我第一次设置应用程序时,我想在应用程序类中存储一些数据。我想我是在一个安全的"方式,但这不是这个问题的主题。

这是我现在拥有的一个例子。

private static String email;  

public static void saveEmailId(String emailToSave) {
    cachedPersistData.saveEmailId(emailToSave);  // save to file
    email = emailToSave;
}

public static String getEmail() {
    return email;
}

public void onCreate() {
    ...
    email = persistData.readEmailId();  // restore from file
    ...
}

我的想法是,如果我总是使用静态方法,我将设置并从同一个地方获取值。 (当时我并不真正了解单身人士,并阅读了一些暗示这不是一个好方法的博客。)

这在我的应用程序中留下了很多这样的调用。

MyApp.saveEmailId("blah");
MyApp.getEmailId();

现在我正在学习测试(使用Robolectric和Mockito),我认为那些静态方法调用会有问题。 首先,我错了吗?我看到了一个名为PowerMock的东西可能对此有所帮助吗?

我开始倾向于使用Dagger,因此我正在考虑将这些方法重构为非静态方法,并使用@Singleton带注释的Dagger提供程序在需要调用一个应用程序时调用app对象的实例这些方法。

因为我认为重构可能是一项重要工作,所以希望能帮助我们了解专业人士和

的专业知识。
  1. 保持代码原样(静态变量和方法)并尝试 解决测试问题。
  2. 重构静态方法并调用Dagger注入的单例实例上的调用。
  3. 更新

    我开始怀疑是否可以消除静态方法调用

    为了将应用程序的实例注入到类中,我需要应用程序中的ObjectGraph。

    所以,如果我有一个这样的注释字段

    @Inject Myapp app;
    

    在类构造函数或onCreate()方法中,我认为我仍然需要像

    这样的东西
    public void onCreate() {
        MyApp.inject(this);
    }
    

    这似乎是一只鸡和蛋的问题。

0 个答案:

没有答案