2014-01-08 2 views
1

Я пытаюсь установить Gradle для запуска теста Android с помощью Roboelectric mocking framework.Использование Roboeletric с Gradle

У меня есть рабочее пространство Eclipse, с этой структурой:

MyApp 
    src 
    gen 
    test 
    .... 

MyAppTest 
    libs 
    test (source folder linked to MyApp.test) 
    .... 

Тесты работает нормально в Затмении вручную настройке построить путь.

Как настроить скрипты сборки Gradle в MyAppTest для запуска тестов в проекте MyApp с использованием Roboelectric?

+0

Вы должны сделать проект MyAppTest зависимым от проекта MyApp –

+0

Например, например, https://github.com/Goddchen/Android-Gradle -Examples/tree/master/Gradle% 20Library% 20Projects –

+0

@EugenMartynov в MyAppTest Я настроил параметры.gradle с includeFlat 'MyApp', и я также установил зависимость в build.gradle (проект компиляции (': MyApp')) без везения. Когда я запускаю тестовую задачу в Gradle, тест не запускается. –

ответ

1

Я был в состоянии получить эту работу на основе этого solution

В общем, попробуйте добавить следующую строку в ваш build.gradle:

sourceSets { 
    testLocal { 
     java.srcDir file('src/test/java') 
     resources.srcDir file('src/test/resources') 
    } 
} 

dependencies { 
    // Dependencies for your production code here. 
    compile 'some.library' 

    // localTest dependencies, including dependencies required by production code. 
    testLocalCompile 'some.library' 
    testLocalCompile 'junit:junit:4.11' 
    testLocalCompile 'com.google.android:android:4.1.1.4' 
    testLocalCompile 'org.robolectric:robolectric:2.2' 
} 

task localTest(type: Test, dependsOn: assemble) { 
    testClassesDir = sourceSets.testLocal.output.classesDir 

    android.sourceSets.main.java.srcDirs.each { dir -> 
     def buildDir = dir.getAbsolutePath().split('/') 
     buildDir = (buildDir[0..(buildDir.length - 4)] + ['build', 'classes', 'debug']).join('/') 

     sourceSets.testLocal.compileClasspath += files(buildDir) 
     sourceSets.testLocal.runtimeClasspath += files(buildDir) 
    } 

    classpath = sourceSets.testLocal.runtimeClasspath 
} 

check.dependsOn localTest 

Не забудьте изменить ваш *Test.java к @RunWith(RobolectricGradleTestRunner.class):

public class RobolectricGradleTestRunner extends RobolectricTestRunner { 
    public RobolectricGradleTestRunner(Class<?> testClass) throws InitializationError { 
     super(testClass); 
    } 

    @Override 
    protected AndroidManifest getAppManifest(Config config) { 
     String pwd = YourApplication.class.getProtectionDomain().getCodeSource().getLocation().getPath(); 
     String root = pwd + "../../../src/main/"; 

     return new AndroidManifest(
       Fs.fileFromPath(root + "AndroidManifest.xml"), 
       Fs.fileFromPath(root + "res"), 
       Fs.fileFromPath(root + "assets")); 
    } 
} 

После этого вы сможете выполнить свой тест через gradle compileDebugJava localTest. Если я правильно помню, для этого потребуется более новая версия градиента (возможно, 1,8 или 1,9)

+0

Обратите внимание, что [' RobolectricGradleTestRunner'] (https://github.com/JakeWharton/ gradle-android-test-plugin/blob/master/README.md) требуется только для [Robolectric 2.2] (https://github.com/robolectric/robolectric/pull/744). @Eugen Martynov может иметь лучшее решение, если вы готовы использовать 'org.robolectric: robolectric: 2.3-SNAPSHOT' –

Смежные вопросы