Решил разабраться, что же такое тестирование. Пару статей на хабре, в 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
Вопрос: чего я не сделал, или сделал, но не так?
Ответ
Актуально для 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
Комментариев нет:
Отправить комментарий