2016-05-08 20 views
6

如何在android測試中監聽ActivityTestRule'sbeforeActivityLaunched()方法。如何在Android測試中監聽Android ActivityTestRule的beforeActivityLaunched方法

我的解決方法是創建一個自定義ActivityTestRule並在構造函數上提供回調。這是不好的做法嗎?同樣的方法可以聽ActivityTestRule構造函數方法。

這裏是我的代碼:

public class CustomActivityTestRule<A extends Activity> extends ActivityTestRule<A> { 

    public interface onBeforeListener{ 
     void onBefore(String message); 
    } 

    private onBeforeListener listener; 

    public CustomActivityTestRule(Class<A> activityClass, onBeforeListener listener) { 
     super(activityClass); 
    } 

    @Override 
    protected void beforeActivityLaunched() { 
     super.beforeActivityLaunched(); 
     listener.onBefore("before activity launch"); 
    } 
} 

在Android的測試類,我可以這樣做:它是能夠做到JUnit的規則實例化的東西

@Rule public CustomActivityTestRule<MainActivity> mainActivityActivityTestRule = new 
      CustomActivityTestRule<MainActivity>(MainActivity.class, new CustomActivityTestRule.onBeforeListener() { 
     @Override 
     public void onBefore(String message) { 
      //do something before activity starts 
     } 
    }); 

同樣的方式。有沒有其他方法來聽取junit測試規則實例化?

回答

5

您可以覆蓋beforeActivityLaunched而不創建新類。

我用在我的測試如下:

@Rule 
public ActivityTestRule<MainActivity> mainActivityActivityTestRule = new ActivityTestRule<MainActivity>(MainActivity.class) { 

    @Override 
    protected void beforeActivityLaunched() { 
     super.beforeActivityLaunched(); 
    } 

}; 
2

您可以配置測試規則,以便它不會自動啓動活動。

@Rule 
public ActivityTestRule<MainActivity> activityTestRule = new ActivityTestRule<MainActivity>(MainActivity.class, false, false); 

在你的設置方法中,你可以準備所有你需要的,然後啓動活動。

activityTestRule.launchActivity(null); 

又見