我想用以下設置測試一個android庫。 com.android.tools.build:gradle:1.2.0, org.robolectric:robolectric:3.0-rc2, android studio 1.2-rc-3
在我的測試設置中,我正在對另一個庫的R文件進行間接引用。測試運行良好從android工作室內,但從命令行運行產生以下錯誤。
java.lang.NoClassDefFoundError: robolectricdemo/com/baselibrary/R$color
at robolectricdemo.com.baselibrary.DemoStaticClass.getDemoResource(DemoStaticClass.java:12)
at LibraryResourceTest.setUp(LibraryResourceTest.java:25)
Caused by:
java.lang.ClassNotFoundException: robolectricdemo.com.baselibrary.R$color
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at org.robolectric.internal.bytecode.InstrumentingClassLoader.loadClass(InstrumentingClassLoader.java:98)
... 2 more
我在http://github.com/tcw48/robolectricDemo創造了我的代碼的簡化版本,具有重要的片段波紋管。
測試類生活在庫extendlibrary
RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class)
public class LibraryResourceTest {
private int color;
@Before
public void setUp() {
color = DemoStaticClass.getDemoResource(RuntimeEnvironment.application);
}
@Test
public void testLibraryResource(){
assertNotNull(color);
}
}
這個靜態類生活在庫baselibrary。
public class DemoStaticClass {
public static int getDemoResource(Context context) {
return context.getResources().getColor(R.color.robo_red);
}
}
我注意到在只正在包extendlibrary產生的R文件生成目錄,但沒有包baselibrary。在名爲baselibrary的包中手動創建R文件會導致測試通過。關於我可能做錯什麼的想法。
在任何人通過你的代碼之前,什麼版本的Robolectric?爲什麼不在這裏使用他們的示例,那工作:https://github.com/robolectric/robolectric-samples?爲什麼你沒有發佈任何代碼片段?應用程序運行正常嗎? –
將添加請求的信息。我不使用這些樣本,因爲它們不適用於我試圖測試的內容。 – TravisW
你需要什麼確切的測試? –