Запуск тестов JUnit с помощью SBT

У меня есть проект 0.13.7 SBT с несколькими подпроектами.

Один из них называется webapp, и он имеет множество тестов JUnit в webapp/src/test/java.

При запуске:

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)
) -> [email protected])

So 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,[email protected]))
[debug] Subclass fingerprints: List((org.scalatest.Suite,false,[email protected]))
[debug] Annotation fingerprints: List((org.scalatest.WrapWith,false,[email protected]))
[debug] Annotation fingerprints: List((org.scalatest.WrapWith,false,[email protected]))
[debug] Subclass fingerprints: List((org.scalatest.Suite,false,[email protected]))
[debug] Subclass fingerprints: List((org.scalatest.Suite,false,[email protected]))
[debug] Annotation fingerprints: List((org.scalatest.WrapWith,false,[email protected]))
[debug] Annotation fingerprints: List((org.scalatest.WrapWith,false,[email protected]))

Работа с:

  • SBT 0.13.9 и
  • JUnit 4.x.

Дополнительная информация:

Ответ 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 в подпроекте и, кроме того, установить значение false для параметра crossPaths.

Ключ предоставлен этой проблемой.

Если основной проект не имеет тестов JUnit, то необходимые настройки теста не обязательно должны быть предоставлены.

Кроме того, для того, чтобы узнать метод отказа и причину, нам нужна эта настройка:

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