Страницы

Поиск по вопросам

суббота, 14 декабря 2019 г.

Тестирование Android JUnit

#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

Комментариев нет:

Отправить комментарий