【问题标题】:Run JUnit tests with SBT使用 SBT 运行 JUnit 测试
【发布时间】:2015-03-26 06:57:27
【问题描述】:

我有一个 0.13.7 SBT 项目,有几个子项目。

其中一个叫做webapp,它在webapp/src/test/java中有很多JUnit测试。

运行时:

sbt webapp/test

仅运行 ScalaTest 测试,但不运行 JUnit 测试。

我的build.sbt 文件片段:

libraryDependencies ++= Seq(
    "com.novocode" % "junit-interface" % "0.11" % Test
)

lazy val webapp = project
    settings(
        Seq(
            projectDependencies ++= Seq(
                ....
                "org.scalatest" %% "scalatest" % "2.2.2" % Test,
                "junit" % "junit" % "4.11" % Test,
                "com.novocode" % "junit-interface" % "0.11" % Test
            )
        ): _*
    )

JUnit 测试示例:

import org.junit.Test;

public class CodificadorBase64Test {
    @Test
    public void testPlain() {
        byte b[] = {64, 127, 72, 36, 100, 1, 5, 9, 123};
        assertEquals("QH9IJGQBBQl7", CodificadorBase64.encode(b));
    }
}

更新(更多研究):

> webapp/testFrameworks
[info] List(TestFramework(WrappedArray(org.scalacheck.ScalaCheckFramework)), TestFramework(WrappedArray(org.specs2.runner.Specs2Framework, org.specs2.runner.SpecsFramework)), TestFramework(WrappedArray(org.specs.runner.SpecsFramework)), TestFramework(WrappedArray(org.scalatest.tools.Framework, org.scalatest.tools.ScalaTestFramework)), TestFramework(WrappedArray(com.novocode.junit.JUnitFramework))

show webapp/loadedTestFrameworks
[info] Map(TestFramework(WrappedArray(
  org.scalatest.tools.Framework, 
  org.scalatest.tools.ScalaTestFramework)
) -> org.scalatest.tools.Framework@65767aeb)

因此,SBT 知道 JUnit 支持但未加载。

调试输出:

[debug] Framework implementation 'org.scalacheck.ScalaCheckFramework' not present.
[debug] Framework implementation 'org.scalacheck.ScalaCheckFramework' not present.
[debug] Framework implementation 'org.scalacheck.ScalaCheckFramework' not present.
[debug] Framework implementation 'org.scalacheck.ScalaCheckFramework' not present.
[debug] Framework implementation 'org.specs2.runner.Specs2Framework' not present.
[debug] Framework implementation 'org.specs2.runner.Specs2Framework' not present.
[debug] Framework implementation 'org.specs2.runner.Specs2Framework' not present.
[debug] Framework implementation 'org.specs2.runner.Specs2Framework' not present.
[debug] Framework implementation 'org.specs2.runner.SpecsFramework' not present.
[debug] Framework implementation 'org.specs2.runner.SpecsFramework' not present.
[debug] Framework implementation 'org.specs2.runner.SpecsFramework' not present.
[debug] Framework implementation 'org.specs2.runner.SpecsFramework' not present.
[debug] Framework implementation 'org.specs.runner.SpecsFramework' not present.
[debug] Framework implementation 'org.specs.runner.SpecsFramework' not present.
[debug] Framework implementation 'org.specs.runner.SpecsFramework' not present.
[debug] Framework implementation 'org.specs.runner.SpecsFramework' not present.
[debug] Framework implementation 'com.novocode.junit.JUnitFramework' not present.
[debug] Framework implementation 'com.novocode.junit.JUnitFramework' not present.
[debug] Framework implementation 'com.novocode.junit.JUnitFramework' not present.
[debug] Framework implementation 'com.novocode.junit.JUnitFramework' not present.
[debug] Subclass fingerprints: List((org.scalatest.Suite,false,org.scalatest.tools.Framework$$anon$1@3ad42aff))
[debug] Subclass fingerprints: List((org.scalatest.Suite,false,org.scalatest.tools.Framework$$anon$1@97f54b))
[debug] Annotation fingerprints: List((org.scalatest.WrapWith,false,org.scalatest.tools.Framework$$anon$2@6a589982))
[debug] Annotation fingerprints: List((org.scalatest.WrapWith,false,org.scalatest.tools.Framework$$anon$2@1b95d5e6))
[debug] Subclass fingerprints: List((org.scalatest.Suite,false,org.scalatest.tools.Framework$$anon$1@5c997dac))
[debug] Subclass fingerprints: List((org.scalatest.Suite,false,org.scalatest.tools.Framework$$anon$1@406c43ef))
[debug] Annotation fingerprints: List((org.scalatest.WrapWith,false,org.scalatest.tools.Framework$$anon$2@282ddefc))
[debug] Annotation fingerprints: List((org.scalatest.WrapWith,false,org.scalatest.tools.Framework$$anon$2@4400c80))

合作:

  • SBT 0.13.9 和
  • JUnit 4.x.

相关信息:

【问题讨论】:

标签: unit-testing junit sbt


【解决方案1】:

最后,我发现,我必须在子项目中添加以下设置:

lazy val webapp = project
    settings(
        Seq(
            projectDependencies ++= Seq(
                ....
                "org.scalatest" %% "scalatest" % "2.2.2" % Test,
                "junit" % "junit" % "4.11" % Test,
                crossPaths := false,
                "com.novocode" % "junit-interface" % "0.11" % Test
            )
        ): _*
    )

在子项目中声明junit-interface依赖很重要,此外,将crossPaths设置设为false。

this issue已经给出了线索​​。

如果主项目没有JUnit测试,则不需要提供所需的测试设置。

另外,为了知道失败的方法和原因,我们需要这个设置:

testOptions in Test := Seq(Tests.Argument(TestFrameworks.JUnit, "-a"))

【讨论】:

    【解决方案2】:

    这个关于在 SBT 中支持 JUnit 的问题已被多次询问,但框架略有不同。

    多次点击让我很难找到最简单和最新的答案。

    This answer by @david.perez seems clear and works with current (2018) SBT 1.1.4.

    (那个特别的问题是关于 JUnit 版本冲突的问题。exclude("junit", "junit-dep") 可能不是必需的。)

    我还将在此处复制粘贴代码以便快速访问:

    libraryDependencies ++= Seq(
      "junit" % "junit" % "4.12" % Test,
      "com.novocode" % "junit-interface" % "0.11" % Test exclude("junit", "junit-dep")
    )
    

    【讨论】:

      猜你喜欢
      • 2014-04-07
      • 2016-05-30
      • 1970-01-01
      • 2011-05-29
      • 1970-01-01
      • 1970-01-01
      • 2012-01-07
      • 2023-03-20
      • 2013-08-23
      相关资源
      最近更新 更多