2016-04-23 74 views
0

我使用Mosby來構建具有MVP模式的應用程序。這是規則之一:MVP:如何寫出從演示者日誌

不要在Presenter中使用android庫代碼。

但是如果我想記錄Presenter的某些內容呢?我看到的唯一方法是使用System.out.println();,但聽起來不好。任何想法?

回答

5

在Presenter中不使用Android庫代碼的原因是,當您編寫單元測試時,您的類中不會依賴於Android代碼,因此它可以直接在JVM上運行。

如果您發現自己需要使用Android代碼,那麼我這樣做的方式是將其隱藏在界面後面。這樣你可以在你的生產代碼中使用一個實現,在你的測試中使用另一個。

所以創建一個接口叫做記錄儀:

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); 
    } 
} 

將記錄器依賴項添加到Presenter的構造函數中。在運行時給它一個LoggerImpl,在測試過程中給它一個LoggerTestImpl。

順便說一句,您可以考慮您是否確實需要首先從演示者處進行大量日誌記錄。 Android Studio允許您擁有不暫停代碼的斷點,並在遇到命中時將消息記錄到調試控制檯。這當然取決於你的要求。

+0

可接受的解決方案。有關斷點的良好功能。謝謝。 – Alexandr

+0

如果您包含使用Android.util.Log方法的第三方庫/外部代碼,那麼該怎麼辦? – Zach