2014-02-12 340 views
8

根據this link我可以創建一個測試應用程序,Robolectric將在測試中自動開始使用。我無法得到這個工作。Robolectric未使用測試應用程序

我使用Dagger進行依賴注入,併爲ActivityApplication創建了注入包裝類。然後,我的每個活動都會擴展包裝活動類,而不是普通的舊Activity

我遇到的問題是,在測試中,由Application模塊提供的依賴關係無法解析,因此測試失敗。這是因爲我們的大多數測試只是建立一個活動(使用Robolectric.buildActivity()),而不是從Application運行。

我曾希望以某種方式修改Robolectric testrunner以在Application下運行我們的測試。無論是或者使用上面鏈接中概述的測試應用程序。

我創建了一個測試應用程序,並且仍然得到相同的測試錯誤,因爲這個測試應用程序沒有運行測試。我試着將測試應用程序移動到不同的軟件包等,但沒有任何變化。

我正在尋找一些關於如何去做我想做的事的建議。對那些有Dagger經驗的人以及他們如何進行測試會特別感興趣。

+0

分享該代碼。我無法理解「在應用程序下運行我們的測試」。我們使用robolectric與匕首,我們有測試應用程序正常工作 –

回答

4

道歉,忘了這件事。爲了解決這個問題,我創建了一個位於測試旁邊的TestApplication。然後我修改了TestRunner(它擴展了RobolectricTestRunner)到:

public class TestRunner extends RobolectricTestRunner { 

    public TestRunner(final Class<?> testClass) throws InitializationError { 
     super(testClass); 
    } 

    ... 

    @Override 
    protected Class<? extends TestLifecycle> getTestLifecycleClass() { 
     return MyTestLifecycle.class; 
    } 

    public static class MyTestLifecycle extends DefaultTestLifecycle { 
     @Override 
     public Application createApplication(final Method method, final AndroidManifest appManifest) { 
      // run tests under our TestApplication 
      return new TestApplication(); 
     } 
    } 

    ... 

} 
3

您可以在文件org.robolectric.Config.properties配置它

application = <fully qualified name of the Application> 

http://robolectric.org/configuring/

+1

只是爲了更新,3.0中不再是這種情況。該文件現在稱爲robolectric.properties。 –

8

這真的很簡單在Robolectric 3.0中,您直接將其添加到@Config註釋中。

@RunWith(RobolectricGradleTestRunner.class) @Config(constants = BuildConfig.class, sdk = 21,application = TestApplication.class) public class ActivityTest {