#android #junit
Решил разабраться, что же такое тестирование. Пару статей на хабре, в Intellij Idea через Maven подключил JUnit, посмотрел примеры, написал пару тестовых методов с аннотацией @Test - все работает. Потом решил на примере тестового приложения Android сделать то же самое: в build.gradle (Module:app) добавил зависимость dependencies { testCompile 'junit:junit:4.12' } скачал и подключил библеотеку junit-4.10.jar написал такой тест import android.test.ActivityTestCase; import junit.framework.Assert; public class ChronometrTest extends ActivityTestCase { public void testOne(){ System.out.println(":::::::::::::::::::::testOne() start.. "); Assert.assertTrue(true); } } жму правой кнопкой Run/ JUnit test, вот что я получаю в ответ: Exception in thread "main" java.lang.NoClassDefFoundError: junit/textui/ResultPrinter at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:260) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:122) Caused by: java.lang.ClassNotFoundException: junit.textui.ResultPrinter at java.net.URLClassLoader$1.run(URLClassLoader.java:372) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:360) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 3 more *Android studio v1.2.2 Вопрос: чего я не сделал, или сделал, но не так?
Ответы
Ответ 1
Актуально для Android studio. Для написания Unit тестов использую Robolectric и JUnit4. Robolectric нужен для получения доступа к специфическим для Andoird компонентам, например Context. Для использования JUnit4 и Robolectric надо дописать в build.gradle: testCompile 'junit:junit:4.12' testCompile "org.mockito:mockito-core:1.9.5" testCompile "org.robolectric:robolectric:3.0" После чего создать папку test рядом с папкой main, должна получится примерно следующая структура: app\src\main\ app\src\test\ В папке test лучше создать такую же структуру пакетов, как и в папке main. Хочу заметить что если в обозревателе проектов выбран тип Android, то папка test не будет видна. Необходимо переключить на тип Project. Так же чтобы все Robolectric и JUnit4 классы были доступны необходимо переключить Test Artifact в BuldVariant на Unit Test. После чего можно начать писать сами тесты. Тестовый класс должен иметь следущющую структуру: @RunWith(RobolectricTestRunner.class) @SmallTest public class SomeTestClass { @Test public void someTest(){ // код, тестирующий что либо } //остальные тесты } Для запуска необходимо создать JUnit конфигурацию и запускать ее, либо через командую строку. Все юнит тесты будут запускать локально, т.е нет необходимости подключать телефон или запускать эмулятор. UPD: если переключить Test Artifact на Unit Test, то папка test будет видна в типе проекта Android.Ответ 2
Обычно это вызвано неправильным выбором конфигурации: JUnit вместо Android Test
Комментариев нет:
Отправить комментарий