【问题标题】:Robolectric with Gradle: package org.robolectric does not exist使用 Gradle 的 Robolectric:包 org.robolectric 不存在
【发布时间】:2013-08-08 09:30:40
【问题描述】:

我正在尝试使用 gradle android 构建系统运行 robolectric 测试。我已经按照instructions given here 尝试使其工作,但是在使用 gradle robolectric 运行测试时,我严重陷入以下错误 -

/Users/Sreekanth/Documents/artoo/Code/Android/HelloWorld/src/test/java/com/example/helloworld/MyTest.java:8: package org.robolectric does not exist
import org.robolectric.RobolectricTestRunner;

我的项目具有以下结构 -

 .
 ├── AndroidManifest.xml
 ├── assets
 ├── bin
 ├── build.gradle
 ├── gen
 ├── libs
 ├── res
 └── src
    ├── main
    │   └── java
    │       └── com
    │           └── example
    │               └── helloworld
    │                   ├── MainActivity.java
    └── test
        └── java
            └── com
                └── example
                    └── helloworld
                        └── MyTest.java

这是我的 build.gradle

buildscript {
    repositories {
        mavenCentral()
        maven {
            url "https://oss.sonatype.org/content/repositories/snapshots"
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
        classpath 'com.novoda.gradle:robolectric-plugin:0.0.1-SNAPSHOT'
    }
}
apply plugin: 'android'
apply plugin: 'robolectric'
apply plugin: 'maven'

dependencies {
    compile 'com.android.support:support-v4:13.0.+'
    robolectricCompile 'org.robolectric:robolectric:2.0'
    robolectricCompile group: 'junit', name: 'junit', version: '4.11'
}

repositories {

    mavenLocal()
    mavenCentral()
    maven {
         url "https://oss.sonatype.org/content/repositories/snapshots"
    }
}


android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        instrumentTest.setRoot('tests')
    }
     defaultConfig {
        minSdkVersion 7
        targetSdkVersion 18
    }
}

我的 MyTest.java 文件:

package com.example.helloworld;

import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.Assert.assertThat;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;

@RunWith(RobolectricTestRunner.class)
public class MyTest {


    @Test
    public void shouldHaveHappySmiles() throws Exception {
        String appName = new MainActivity().getResources().getString(R.string.app_name);
        assertThat(appName, equalTo("My Application"));
    }
}

如果我使用新的 gradle 项目结构,我可以成功运行 robolectric 测试,但如果我使用如上所述的旧 eclipse 项目结构,则不能。

【问题讨论】:

    标签: android unit-testing gradle robolectric


    【解决方案1】:

    您需要使用新的结构,句号。 robolectric 插件对该路径进行了硬编码。您可能可以从您的构建脚本中设置 sourceSet,但它会是 hacky 而不是“官方的”。

    【讨论】:

    • Gradle 能够成功识别我的测试类位置,但它没有使用 robolectric 配置(它具有 org.robolectric 作为依赖项)来编译它。我尝试将 sourceSets.robolectric.java.srcDir file('src/test/java') 添加到我的 build.gradle,但没有运气。
    • 我有点困惑。您使用的是“新”结构(src/main/java、src/test/java)还是 Eclipse 结构?尝试将apply: 'robolectric' 行移到android{} 块之后。
    • 还是同样的问题。上面的问题中提到了我的项目结构。它的 src/main/java,src/test/java 但所有其他文件夹(如“res”)都存在于根级别而不是“src/main”中。
    • 两件事-java.srcDirs = ['src'] 意味着main 的所有Java 源代码都将从src/ 开始,这与您所说的相反。其次,实际错误似乎与依赖关系有关 - 尝试删除您的 build.gradle 文件夹,然后重试。
    • java.srcDirs = ['src/main/java'] 解决了我之前的错误。但现在我陷入了这个错误 - MyTest.java:16: cannot access android.app.Activity class file for android.app.Activity not found。知道出了什么问题吗?
    猜你喜欢
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 2019-10-12
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 2022-06-16
    相关资源
    最近更新 更多