2013-09-24 42 views
1

所以我有這個錯誤,使用Robolectric。RobolectricTestRunner,測試類只能有一個構造函數

 
java.lang.IllegalArgumentException: Test class can only have one constructor 
    at org.junit.runners.model.TestClass.(TestClass.java:40) 
    at org.junit.runners.ParentRunner.(ParentRunner.java:75) 
    at org.junit.runners.BlockJUnit4ClassRunner.(BlockJUnit4ClassRunner.java:57) 
    at org.robolectric.RobolectricTestRunner$HelperTestRunner.(RobolectricTestRunner.java:626) 
    at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:198) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 
    at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:177) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153) 
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124) 
    at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200) 
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153) 
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103) 

說實話,它在幾個星期前就開始工作了,但是在我的項目發生了一些變化之後,它就打破了。我正在使用4.3_r1平臺版本。 正常的JUnit測試運行良好。

測試類:

 
@RunWith(RobolectricTestRunner.class) 
public class PreferenceTest 
{ 
    @Before 
    public void setUp() 
    { 
     RoboGuice.setBaseApplicationInjector(Robolectric.application, RoboGuice.DEFAULT_STAGE, 
       Modules.override(RoboGuice.newDefaultRoboModule(Robolectric.application)) 
         .with(new CoreConfigModule())); 
    } 

    @Test 
    public void testSessionTokenPrefs() 
    { 
     InternalPreferences.setSessionToken("abcd1234"); 
     assertThat(InternalPreferences.getSessionToken()).isEqualTo("abcd1234"); 

     InternalPreferences.clearSessionToken(); 
     assertThat(InternalPreferences.getSessionToken()).isNull(); 
    } 
} 
+0

我不確定。 Robolectric直接與類加載器一起工作。也許這種組合(Robolectric&RoboGuice)爲類 –

回答

1

所以從SVN歷史,它似乎是測試在我重新命名測試軟件包後打破了。

我剛剛重新命名它,但不是它的以前的名稱,它的工作。 我不知道到底發生了什麼,但至少我的測試正在運行。

0

好像你傳遞的類junit.framework.TestSuite.class到JUnitCore.runClasses()。 JUnitCore.runClasses嘗試實例化類。爲了避免出現問題,它需要你傳遞任何類只有一個構造函數

您還可以檢查這些討論更多細節,link1link2link3

+1

增加了另一個構造函數我的失敗測試類中沒有任何構造函數。這是我檢查的第一件事。我也嘗試了一個明確的空架構。 – jakk

0

在我的情況下,這是因爲我把重複的單詞放在我的包名中。它是這樣的:

au.com.andoroid.com.android 

一旦我重命名這個軟件包的東西,沒有重複,那麼它工作正常。

相關問題