在 MacOSx 上使用 Gradle 编译一个简单的 Junit 测试

Posted

技术标签:

【中文标题】在 MacOSx 上使用 Gradle 编译一个简单的 Junit 测试【英文标题】:Getting one simple Junit test to compile with Gradle on MacOSx 【发布时间】:2013-01-11 09:10:33 【问题描述】:

我正在尝试构建最简单的 gradle 项目(带有测试)。查看了所有相关问题和 Google 搜索,我似乎遗漏了一些非常基本的东西,而且显然不常见。

我创建了一个测试类,“gradle compileTestJava”无法编译文件说

包 org.junit 不存在

它找到了测试,知道这是一个测试,但似乎找不到自己的 junit.jar 文件。

build.gradle 包含

应用插件:'java'

就是这样。裸露的骨头!我也尝试添加

依赖

testCompile 'junit:junit:4.10'

这样我得到“无法解决所有依赖项”,这让我认为 gradle 已经迷失了它自己的文件(?)。我看到 gradle 安装了 /Users/me/Documents/Projects/gradle-1.3/lib/plugins/junit-4.10.jar 文件。

事实上,当我运行“gradle dependencies”时,我得到了

testCompile - Classpath for compiling the test sources.
No dependencies

我不知道这是否应该包含内置插件依赖项。我的猜测是它应该列出junit。

有什么想法吗?

这是我得到的:

:compileTestJava

/Users/me/Documents/Projects/experiment1/src/test/java/MyUnitTests.java:3: package org.junit does not exist
import org.junit.*;
       ^
/Users/me/Documents/Projects/experiment1/src/test/java/MyUnitTests.java:7: cannot find symbol
symbol  : class Test
location: class test.java.MyUnitTests
    @Test
     ^
/Users/me/Documents/Projects/experiment1/src/test/java/MyUnitTests.java:9: cannot find symbol
symbol  : variable Assert
location: class test.java.MyUnitTests
            Assert.assertEquals(2 + 2, 4);
            ^
3 errors
 FAILED

FAILURE: Build failed with an exception.

【问题讨论】:

您找到解决此问题的方法了吗?我被困在这里,到目前为止找到的每个解决方案都不起作用。我正在尝试在我的 android SDK 项目中运行单元测试并面临同样的问题。 【参考方案1】:

你需要确保你已经设置了你的 repos,并且你需要包含对 junit 的依赖。这意味着您的 build.gradle 需要类似这样的东西

repositories 
    mavenCentral()


apply plugin: 'java'

dependencies 
    testCompile 'junit:junit:4.10'

【讨论】:

对于 Android Studio,它是 instrumentTestCompile 而不是 testCompile 这仍然对我不起作用.. 有 mavenLocal,切换到 Central.. 没有变化。 注意:这里有关于这个主题的更多信息(在最后,作者提到在 Gradle 版本 2.2 到 2.8 上测试一个可行的解决方案):softnoise.wordpress.com/2014/09/07/…【参考方案2】:

本指南可能会有所帮助 - http://www.slideshare.net/tobiaspreuss/how-to-setup-unit-testing-in-android-studio

最新的 gradle 测试应该在 androidTest 目录下

也在你的 gradle.build 中:

dependencies 
     androidTestCompile 'junit:junit:4.+'

同时添加 defaultConfig

defaultConfig 

    testPackageName "test.java.foo"
    testInstrumentationRunner "android.test.InstrumentationTestRunner"


【讨论】:

【参考方案3】:

您的存储库声明中可能还需要 mavenLocal()

repositories 
  mavenLocal()
  mavenCentral()

【讨论】:

【参考方案4】:

在我的 build.gradle 我有这个:

android 
sourceSets  main  java.srcDirs = ['src/main/java', 'src/test/java']  

还有

dependencies 
testCompile 'junit:junit:4.12'

当我从 build.gradle 中删除以下内容时,问题就消失了

'src/test/java'

【讨论】:

当您使用 New->Folder->Java 文件夹创建该文件夹时,src/test/java 会自动添加到 sourceSets。供参考:vogella.com/tutorials/AndroidTesting/article.html,第 6.2 节(见警告)。它失败的原因是 testCompile 只发生在测试 java 文件中。当该目录被指定为源时,不会发生testCompile,因此不会编译org.junit包,导致它在运行时失败。 作为一个教育测试,您还可以将“compile 'junit:junit:4.12'”添加到您的依赖项中以查看问题消失。并不是说你想把它留在那里真正......【参考方案5】:

只需添加

repositories 
    mavenCentral()

如果您使用 Android Studio 进行 Android 开发,它对我有用

【讨论】:

【参考方案6】:

我在我的测试用例中遇到了类似的问题,并且遇到了类似的错误。我可以通过在我的 build.gradle 文件中添加源集来修复它。

例如:

sourceSets 
src 
   test
      java
    srcDirs =["com/testfile/appservice/test/endpoint"]
    
      

src/test/java 是测试包上方的目录名称,com.testfile.appservice.test.endpoint 是我的 junit 测试编写的包的名称。

【讨论】:

以上是关于在 MacOSx 上使用 Gradle 编译一个简单的 Junit 测试的主要内容,如果未能解决你的问题,请参考以下文章

Qt 5.4 - Mac OS X 10.6 支持

MacOSX64位机器上gcc编译32位x264静态库

Freeline:Gradle工程上如何进行增量编译?

如何从 Gradle 构建中设置环境变量?

oc语言关闭指定程序

gradle使用—gradle介绍