单元测试 – 使用SBT运行JUnit测试

我有一个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)

所以JUnit支持是SBT已知的,但没有加载.

调试输出

[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,org.scalatest.tools.Framework$$anon$1@97f54b))
[debug] Annotation fingerprints: List((org.scalatest.WrapWith,org.scalatest.tools.Framework$$anon$2@6a589982))
[debug] Annotation fingerprints: List((org.scalatest.WrapWith,org.scalatest.tools.Framework$$anon$2@1b95d5e6))
[debug] Subclass fingerprints: List((org.scalatest.Suite,org.scalatest.tools.Framework$$anon$1@5c997dac))
[debug] Subclass fingerprints: List((org.scalatest.Suite,org.scalatest.tools.Framework$$anon$1@406c43ef))
[debug] Annotation fingerprints: List((org.scalatest.WrapWith,org.scalatest.tools.Framework$$anon$2@282ddefc))
[debug] Annotation fingerprints: List((org.scalatest.WrapWith,org.scalatest.tools.Framework$$anon$2@4400c80))

使用方法

> SBT 0.13.9,和
> JUnit 4.x.

相关信息:

> Why don’t junit tests get executed with “sbt test”?
> SBT documentation

解决方法

最后,我发现,我必须将以下设置添加到子项目中:
lazy val webapp = project
    settings(
        Seq(
            projectDependencies ++= Seq(
                ....
                "org.scalatest" %% "scalatest" % "2.2.2" % 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"))

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...