2015-11-11 11 views
1

我的應用包含兩種風味的A和B.當我運行./gradlew app:test時,風味A的所有測試都通過了,而風味B失敗。我也有兩種構建類型debugrelease風味A的Robolectric測試案例通過,而風味B失敗

我的架構是這樣的:

\my-project 
---- \app 
-------- \src 
------------ \debug 
------------ \flavor_A 
------------ \main 
------------ \flavor_B 
------------ \test 
---------------- \java 
-------------------- \ com.my.main.package 
------------------------ \ My_test_classes.java 
-------------------- \ TestApplication.java 

TestApplication.java覆蓋已在人Application類,as explained here被定義的一些方法。

我的測試課很簡單。

@RunWith(RobolectricGradleTestRunner.class) 
@Config(constants = BuildConfig.class, sdk = 21, packageName = "com.my.main.package") 
public class WelcomeActivityTest 
{ 
    Activity activity; 
    Button btnSignUp; 
    TextView btnSkip; 

    @Before 
    public void setUp() 
    { 
     activity = Robolectric.buildActivity(WelcomeActivity.class).create().get(); // << line 32 

     btnSignUp = (Button) activity.findViewById(R.id.dialog_welcome_sign_up); 
     btnSkip = (TextView) activity.findViewById(R.id.dialog_welcome_next_time); 
    } 

    @Test 
    public void shouldNotBeNull() throws Exception 
    { 
     assertNotNull(activity); 
    } 

    @Test 
    public void shouldHaveSignUp_SkipButtons() throws Exception { 
     assertViewIsVisible(btnSignUp); 
     assertViewIsVisible(btnSkip); 
    } 

    public static void assertViewIsVisible(View view) { 
     assertNotNull(view); 
     assertThat(view.getVisibility(), equalTo(View.VISIBLE)); 
    } 
} 

最後,這是我得到的日誌:

java.util.ConcurrentModificationException 
    at java.util.ArrayList.sort(ArrayList.java:1456) 
    at java.util.Collections.sort(Collections.java:141) 
    at org.robolectric.res.ResBundle.put(ResBundle.java:32) 
    at org.robolectric.res.ResBunch.put(ResBunch.java:12) 
    at org.robolectric.res.ValueResourceLoader.processNode(ValueResourceLoader.java:36) 
    at org.robolectric.res.XpathResourceXmlLoader.processResourceXml(XpathResourceXmlLoader.java:22) 
    at org.robolectric.res.ValueResourceLoader.processResourceXml(ValueResourceLoader.java:19) 
    at org.robolectric.res.XmlLoader.processResourceXml(XmlLoader.java:46) 
    at org.robolectric.res.DocumentLoader.loadResourceXmlFile(DocumentLoader.java:47) 
    at org.robolectric.res.DocumentLoader.loadFile(DocumentLoader.java:40) 
    at org.robolectric.res.DocumentLoader.load(DocumentLoader.java:30) 
    at org.robolectric.res.PackageResourceLoader.loadEverything(PackageResourceLoader.java:32) 
    at org.robolectric.res.PackageResourceLoader.doInitialize(PackageResourceLoader.java:19) 
    at org.robolectric.res.XResourceLoader.initialize(XResourceLoader.java:29) 
    at org.robolectric.res.XResourceLoader.getValue(XResourceLoader.java:52) 
    at org.robolectric.res.PackageResourceLoader.getValue(PackageResourceLoader.java:5) 
    at org.robolectric.res.RoutingResourceLoader.getValue(RoutingResourceLoader.java:31) 
    at org.robolectric.shadows.ShadowAssetManager.resolveStyle(ShadowAssetManager.java:343) 
    at org.robolectric.shadows.ShadowAssetManager.applyThemeStyle(ShadowAssetManager.java:286) 
    at org.robolectric.shadows.ShadowResources$ShadowTheme.applyStyle(ShadowResources.java:461) 
    at android.content.res.Resources$Theme.applyStyle(Resources.java) 
    at android.app.ContextImpl.getTheme(ContextImpl.java:838) 
    at android.content.ContextWrapper.getTheme(ContextWrapper.java:121) 
    at android.view.ContextThemeWrapper.initializeTheme(ContextThemeWrapper.java:135) 
    at android.view.ContextThemeWrapper.setTheme(ContextThemeWrapper.java:85) 
    at org.robolectric.shadows.ShadowActivity.setThemeFromManifest(ShadowActivity.java:85) 
    at org.robolectric.shadows.CoreShadowsAdapter$1.setThemeFromManifest(CoreShadowsAdapter.java:35) 
    at org.robolectric.util.ActivityController.attach(ActivityController.java:58) 
    at org.robolectric.util.ActivityController$1.run(ActivityController.java:121) 
    at org.robolectric.shadows.ShadowLooper.runPaused(ShadowLooper.java:304) 
    at org.robolectric.shadows.CoreShadowsAdapter$2.runPaused(CoreShadowsAdapter.java:45) 
    at org.robolectric.util.ActivityController.create(ActivityController.java:118) 
    at org.robolectric.util.ActivityController.create(ActivityController.java:129) 
    at com.passenger.WelcomeActivityTest.setUp(WelcomeActivityTest.java:32) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) 
    at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:251) 
    at org.robolectric.RobolectricTestRunner.runChild(RobolectricTestRunner.java:188) 
    at org.robolectric.RobolectricTestRunner.runChild(RobolectricTestRunner.java:54) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
    at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:152) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140) 


Process finished with exit code 255 

已經困惑我的是我不是不同的測試口味的東西,所以爲什麼flavorA測試通行證,而flavorB失敗。任何建議,將不勝感激。謝謝。

回答

1

好吧,似乎我解決了我的問題(三天後,跆拳道)。

我的問題是缺乏對構建變體的深刻理解。我想如果TestApplication.javatest文件夾下,那麼它的內容適用於debugrelease,但它只適用於release

我將其名稱更改爲TestDebugApplication並複製到debug文件夾並修復了問題。

希望它有幫助,如果你有同樣的問題。

0

這是多個線程訪問資源的問題,導致Robolectric嘗試同時加載資源。

我在https://github.com/robolectric/robolectric/pull/2353中修復了這個問題。如果您使用最新的快照,它應該可以工作,或者您可以等待3.1版本。

作爲一種臨時措施,如果您只是強制加載資源Application#onCreate()或其他任何將在任何其他線程創建之前運行的方法,它將確保在多線程嘗試使用它們之前已加載資源。

我懷疑你所做的任何改變導致了這種情況,這會掩蓋錯誤,因爲這與構建變體無關。