1

我在我的 Scala 项目中使用 Gradle,对 scalatest 的文档有点沮丧。所以我搜索了一个替代的测试框架。我发现的唯一一个是 µTest(微测试)。但到目前为止,我还没有找到将 µTest 集成到 Gradle 中的方法。

4

1 回答 1

1

经过一段时间的调查,我找到了解决方案。如果我有一个样本测试:

import utest._

object SampleTests extends TestSuite {
  val tests:Tests = Tests {
    var x = 0
    'outer1 - {
      x += 1
      'inner1 - {
        x += 2
        assert(x == 3) // 0 + 1 + 2
        x
      }
      'inner2 - {
        x += 3
        assert(x == 4) // 0 + 1 + 3
        x
      }
    }
    'outer2 - {
      x += 4
      'inner3 - {
        x += 5
        assert(x == 9) // 0 + 4 + 5
        x
      }
    }
  }

  def main(args: Array[String]): Unit = {
    val results = TestRunner.runAndPrint(SampleTests.tests, "SampleTests")
  }
}

重要的是,有一个 main 函数调用 TestRunner 的方法,其参数类型为 Tests。这个参数可以是一个值或用 def 定义的方法。

此外,测试代码应该在测试源位置内(测试而不是主要)。

要触发此代码,您需要修改 build.gradle 文件。您可以在其中插入用户定义的任务,如下所示:

task microTest(type: JavaExec) {
    main = 'package.SampleTests'
    classpath = sourceSets.test.runtimeClasspath
}

当然你需要在 build.gradle 中声明对测试框架的依赖:

testImplementation "com.lihaoyi:utest_2.a:x.y.z"

法兹特:

有一种方法可以触发测试

./gradlew microTest

或在 IDE 中用鼠标单击列出的 gradle 任务。测试框架微测试的输出将以预期的方式打印到控制台。但是当您通过在 build.gradle 中定义以下行来间接调用此任务时:

test.finalizedBy microTest

单击 IDE (Intellij) 中的测试任务,然后彩色输出被特殊字符替换。

当不点击(进入命令行:./gradlew test)时,所有输出都正确打印。

于 2020-01-22T07:45:27.440 回答