JMK*_*JMK 5 junit scala scalatest
我的 scalatest 测试使用标记功能,如下所示:
"A test" should "test something" taggedAs (Smoke) in {
....
}
Run Code Online (Sandbox Code Playgroud)
是否有机会将标签添加到使用 scalatest 运行程序的 -u 选项生成的junit 报告中?
试图到处寻找,但除了如何禁用/启用基于这些标签对象的测试之外,找不到任何答案。
scalatest-custom-reporter-example是一个工作示例,展示了如何创建自定义Reporter
并将标签作为自定义信息传递
给报告器。
JUnitXmlReporter-u当通过参数
配置时,生成 JUnit 的 XML 格式的报告:
Test / testOptions += Tests.Argument("-u", "target")
Run Code Online (Sandbox Code Playgroud)
给出以下测试:
Test / testOptions += Tests.Argument("-u", "target")
Run Code Online (Sandbox Code Playgroud)
默认情况下, JUnitXmlReporter.xmlify 输出以下字符串:
...
<testcase
name="The Hello object should say hello" classname="example.HelloSpec" time="0.011">
</testcase>
<testcase
name="The Hello object should sing lullaby" classname="example.HelloSpec" time="0.001">
</testcase>
...
Run Code Online (Sandbox Code Playgroud)
虽然我们想将测试的标签添加到报告中,如下所示:
...
<testcase
name="The Hello object should say hello" tag="Set(Slow)" classname="example.HelloSpec" time="0.011">
</testcase>
<testcase
name="The Hello object should sing lullaby" tag="Set(Unreliable, Slow)" classname="example.HelloSpec" time="0.001">
</testcase>
...
Run Code Online (Sandbox Code Playgroud)
通过扩展创建自定义报告器JUnitXmlReporter:
package org.scalatest.tools
class JUnitReporterWithTags extends JUnitXmlReporter("target")
Run Code Online (Sandbox Code Playgroud)添加成员映射以按测试名称保存套件tags:
private var tags: Map[String, Set[String]] = Map.empty
Run Code Online (Sandbox Code Playgroud)覆盖xmlify以在输出字符串中注入标签:
override def xmlify(testsuite: Testsuite): String = {
var xml = super.xmlify(testsuite)
for (testcase <- testsuite.testcases) yield {
xml = xml.replace(s""""${testcase.name}"""", s""""${testcase.name}" tag="${tags(testcase.name)}"""" )
}
xml
}
Run Code Online (Sandbox Code Playgroud)BeforeAndAfterAll测试中的
Mixin特征:class HelloSpec extends FlatSpec with Matchers with BeforeAndAfterAll {
Run Code Online (Sandbox Code Playgroud)Suite.tags
作为事件payload的参数InfoProvided,通过以下方式传递给记者Informer:
override def beforeAll(): Unit = {
info("", Some(tags))
}
Run Code Online (Sandbox Code Playgroud)覆盖JUnitXmlReporter.apply以提取和存储标签有效负载:
override def apply(event: Event): Unit = {
super.apply(event)
event match {
case e: InfoProvided =>
e.payload.foreach { providedTags =>
tags ++= providedTags.asInstanceOf[Map[String, Set[String]]]
}
case _ =>
}
}
Run Code Online (Sandbox Code Playgroud)JUnitReporterWithTags给-C argument:
Test / testOptions += Tests.Argument("-C", "org.scalatest.tools.JUnitReporterWithTags")
Run Code Online (Sandbox Code Playgroud)sbt testtarget/TEST-example.HelloSpec.xml| 归档时间: |
|
| 查看次数: |
1137 次 |
| 最近记录: |