Я пытаюсь проверить библиотеку андроидов со следующей настройкой. 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);
}
}
Я заметил в каталоге сборки, что файл R только генерируется в пакете extendlibrary но нет пакета для baselibrary. Вручную создание R-файла в пакете, называемом baselibrary, заставляет тест проходить. Любые идеи о том, что я могу делать неправильно.
Перед тем, как кто-нибудь прочитает ваш код, какая версия Robolectric? Почему бы просто не использовать их образцы здесь, эта работа: https://github.com/robolectric/robolectric-samples? Почему вы не опубликовали какие-либо фрагменты кода? Приложение работает нормально? –
Добавит запрошенную информацию. Я не использую образцы, потому что они не применяются к тому, что я пытаюсь проверить. – TravisW
Какое точное испытание вам нужно? –