4

我使用Mosby构建具有 MVP 模式的应用程序。这是规则之一:

不要在 Presenter 中使用 android 库代码。

但是,如果我想从 Presenter 记录一些东西怎么办?我看到的唯一方法是使用System.out.println();,但听起来不太好。任何想法?

4

1 回答 1

8

不在 Presenter 中使用 Android 库代码的原因是,当您编写单元测试时,您的类中的 Android 代码没有依赖关系,因此它可以直接在 JVM 上运行。

如果您发现自己需要使用 Android 代码,那么我这样做的方法是将其隐藏在界面后面。这样,您可以在生产代码中使用一种实现,在测试中使用另一种实现。

所以创建一个名为 Logger 的接口:

public interface Logger {

    void logd(String tag, String message);
}

然后对于您的生产代码,您可以使用:

public class LoggerImpl implements Logger {

    public void logd(String tag, String message) {

        Log.d(tag, message);
    }
}

但是当你运行测试时,你可以使用另一个实现:

public class LoggerTestImpl implements Logger {

    public void logd(String tag, String message) {

        System.out.println(tag + " " + message);
    }
}

将 Logger 依赖项添加到 Presenter 的构造函数。在运行时给它一个 LoggerImpl,在测试期间给它一个 LoggerTestImpl。

顺便说一句,您可以首先考虑是否真的需要从您的 Presenter 进行大量日志记录。Android Studio 允许您设置不暂停代码的断点,并在遇到中断时将消息记录到调试控制台。当然,这将取决于您的要求。

于 2016-04-23T14:43:31.487 回答