我正在使用以下sbt命令运行集成测试
sbt clean cover it:test coverageReport
此命令运行集成测试,检测它并生成报告.
Build.sbt有以下内容:
coverageMinimum in IntegrationTest := 21.0
coverageFailOnMinimum in IntegrationTest := true
Run Code Online (Sandbox Code Playgroud)
输出如下:
[info] Statement coverage.: 20.16%
[info] Branch coverage....: 12.00%
[info] Coverage reports completed
[info] All done. Coverage was [20.16%]
Run Code Online (Sandbox Code Playgroud)
输出结果具有20.16%的代码覆盖率,但build.sbt中的限制未强制执行限制.
如果我将build.sbt更改为以下它的工作原理:
coverageMinimum := 21.0
coverageFailOnMinimum := true
Run Code Online (Sandbox Code Playgroud)
想要知道我为指定专门针对集成测试的限制而遗漏了什么
版本信息:
sbt:0.13.17
sbt-scoverage:1.5.1
我用的sbt插件scoverage来为我的斯卡拉项目的测试覆盖率报告。但是,我无法合并单元测试和集成测试的测试报告。
这是我运行的命令
sbt coverage test // to run unit tests
sbt coverage it:test // to run integration tests
sbt coverageReport // to generate coverage report
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我只得到了集成测试的覆盖率报告。
题
提前致谢。
如果可以利用sbt增量编译并避免每次运行测试时都必须重新编译整个项目,这将是很好的,这正是你所做的事情clean.但是以下顺序如下:
sbt> coverage
sbt> test
sbt> coverageReport
Run Code Online (Sandbox Code Playgroud)
不会重新生成覆盖率报告,但这个会做:
sbt> clean
sbt> coverage
sbt> test
sbt> coverageReport
Run Code Online (Sandbox Code Playgroud)
例如,以下序列将始终生成相同的覆盖率报告(即第一次生成的报告):
sbt> coverage
sbt> test
sbt> coverageReport
Run Code Online (Sandbox Code Playgroud)
在这里我更改了我的一个测试文件并再次运行:
sbt> coverage
sbt> test
sbt> coverageReport
Run Code Online (Sandbox Code Playgroud) 我用过滤器拆分了单元测试和集成测试:
lazy val FunTest = config("it") extend Test
def funTestFilter(name: String): Boolean = name endsWith "Spec"
def unitTestFilter(name: String): Boolean = name endsWith "Test"
...
testOptions in Test := Seq(Tests.Filter(unitTestFilter)),
testOptions in FunTest := Seq(Tests.Filter(funTestFilter)),
...
Run Code Online (Sandbox Code Playgroud)
所以我可以做这样的事情:
sbt clean coverage test dockerComposeUp it:test dockerComposeStop coverageReport
可悲的是,这杀死了我所有的险种,只有生成BuildInfo的险种了。
仅使用sbt clean coverage test coverageReport或sbt clean coverage it:test coverageReport按预期工作。
整个项目可以在这里找到:https : //github.com/pme123/play-binding-form
覆盖版本: 1.5.1
我刚开始第一次使用scoverage.它现在对我很有用,但是我遇到了一个排除包的语法问题.
当我的包结构如下:
- com
- project
- core
- excluded
- notExcluded
Run Code Online (Sandbox Code Playgroud)
我应该在build.sbt中添加什么来排除包:排除?
提前致谢!
我在Scala中使用多项目结构。一些项目位于根项目之外。有一个simlink可以链接它们并使sbt起作用。这是结构的一个小例子:
一些项目
根文件夹/某些项目-> ../some-project
问题是:覆盖率不适用于这些项目,从而导致覆盖范围错误。
当我运行命令“ sbt reportCoverage”时,出现这种错误:
[错误](scalaCommons / *:coverageReport)找不到'/ Users / user1 / dev / root-folder / some-project的源根目录...
我正在使用 sbt scoverage 1.3.5 (Scala 2.11.8),并且我有一堆我不想包含覆盖率报告的类。特别是基类及其测试位于com/corp/something/something_elsemain 和 test 中。我已将以下几行添加到我的 buld.sbt 中:
coverageEnabled := true
coverageMinimum := 90
coverageFailOnMinimum := true
coverageExcludedPackages := """com.corp.something.something_else.*;"""
Run Code Online (Sandbox Code Playgroud)
我已经尝试过用单引号代替\\.点,有或没有最后的分号.*,有或没有最后的分号,但到目前为止,当我运行sbt clean coverage test coverageReport报告时包含所有内容,并且它不排除我列出的包。我缺少什么?
也许类似地,即使所有包的覆盖率都低于 90%,覆盖率报告也不会失败,并且根据我设置的选项,它应该会失败,对吧?
我知道sbt clean coverage test将使用项目中的所有测试用例生成覆盖率报告,即使使用温暖的JVM也需要很长时间才能完成.
我希望对我编写的代码的测试运行覆盖,所以我尝试运行单个测试用例sbt coverage test-only package.ScalaSpec,我得到以下错误.
错误
[scala-project] $ coverage test-only package.ScalaSpec
<set>:1: error: eof expected but 'package' found.
coverageEnabled in ThisBuild := true test-only package.ScalaSpec
^
[error] Error parsing expression.
我想知道,是否有可能从intellij(不是从终端)运行scoverage,甚至更好,看看像intellij本地报道的scoverage报告?
谢谢
如果测试覆盖率低于阈值,我们希望在 codeship 上构建失败。但它并没有使构建失败。
覆盖插件:
addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.3.5")
Run Code Online (Sandbox Code Playgroud)
在 build.sbt 中添加了以下两条语句
coverageMinimum := 80,
coverageFailOnMinimum := true
Run Code Online (Sandbox Code Playgroud)
如果测试覆盖率低于 80,即使在本地也不会失败。我运行的命令是
sbt clean coverage test coverageReport
Run Code Online (Sandbox Code Playgroud)