我如何让 class 中的每个测试自动标记为特定标签
How do I have every test in class automatically tagged with a specific tag
我正在使用 flatspec 特征来创建我的测试,我想创建一个基础 class,它会自动用特定标签标记 class 中的任何测试。
例如,classes 中继承自 IntegrationTest class 的任何测试都将自动进行适当标记。所以代替:
class ExampleSpec extends FlatSpec {
"The Scala language" must "add correctly" taggedAs(IntegrationTest) in {
val sum = 1 + 1
assert(sum === 2)
}
我想这样做并且仍然将测试标记为 IntegrationTest
class ExampleSpec extends IntegrationSpec {
"The Scala language" must "add correctly" in {
val sum = 1 + 1
assert(sum === 2)
}
谢谢!
如果您愿意在测试 class 上使用直接注释而不是父注释 class,您可以使用 https://github.com/kciesielski/tags-demo 中的示例。针对您的示例进行了一些调整,您需要声明一个 Java class:
package tags;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@org.scalatest.TagAnnotation
@Retention(RUNTIME)
@Target({METHOD, TYPE})
public @interface MyAnnotation {
}
然后你用它来注释Scala测试class:
@tags.MyAnnotation
class ExampleSpec extends FlatSpec {
"The Scala language" must "add correctly" in {
val sum = 1 + 1
assert(sum === 2)
}
然后您必须使用实际字符串 tags.MyAnnotation
来指定您想要的标签 运行(或忽略)。
我尝试改为注释父对象 class,但无法正常工作。我可以想象这对您来说是否是一个重大问题,具体取决于您还想做什么。
实际上,org.scalatest.Tag class 的在线文档很好地描述了所有这些,尽管我说 在 开始工作之后通过在 GitHub..
上关注上述项目
因为 ScalaTest 2.2.0 标签可以被继承 (http://www.scalatest.org/release_notes/2.2.0)。
将@Inherited 添加到注释定义中。
package tags;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
**@Inherited**
@org.scalatest.TagAnnotation
@Retention(RUNTIME)
@Target({METHOD, TYPE})
public @interface RequiresIntegrationStuff {
}
注释您的基础规范。
@RequiresIntegrationStuff
class IntegrationSpec extends FlatSpec {}
只需使用您的基础规格作为基础 class。
class ExampleSpec extends IntegrationSpec {
"The Scala language" must "add correctly" in {
val sum = 1 + 1
assert(sum === 2)
}
之后,ExampleSpec 将被标记为 tags.RequiresIntegrationStuff。
您将在此处找到工作项目:https://github.com/wojda/tags-demo (based on https://github.com/kciesielski/tags-demo from )
我正在使用 flatspec 特征来创建我的测试,我想创建一个基础 class,它会自动用特定标签标记 class 中的任何测试。
例如,classes 中继承自 IntegrationTest class 的任何测试都将自动进行适当标记。所以代替:
class ExampleSpec extends FlatSpec {
"The Scala language" must "add correctly" taggedAs(IntegrationTest) in {
val sum = 1 + 1
assert(sum === 2)
}
我想这样做并且仍然将测试标记为 IntegrationTest
class ExampleSpec extends IntegrationSpec {
"The Scala language" must "add correctly" in {
val sum = 1 + 1
assert(sum === 2)
}
谢谢!
如果您愿意在测试 class 上使用直接注释而不是父注释 class,您可以使用 https://github.com/kciesielski/tags-demo 中的示例。针对您的示例进行了一些调整,您需要声明一个 Java class:
package tags;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@org.scalatest.TagAnnotation
@Retention(RUNTIME)
@Target({METHOD, TYPE})
public @interface MyAnnotation {
}
然后你用它来注释Scala测试class:
@tags.MyAnnotation
class ExampleSpec extends FlatSpec {
"The Scala language" must "add correctly" in {
val sum = 1 + 1
assert(sum === 2)
}
然后您必须使用实际字符串 tags.MyAnnotation
来指定您想要的标签 运行(或忽略)。
我尝试改为注释父对象 class,但无法正常工作。我可以想象这对您来说是否是一个重大问题,具体取决于您还想做什么。
实际上,org.scalatest.Tag class 的在线文档很好地描述了所有这些,尽管我说 在 开始工作之后通过在 GitHub..
上关注上述项目因为 ScalaTest 2.2.0 标签可以被继承 (http://www.scalatest.org/release_notes/2.2.0)。
将@Inherited 添加到注释定义中。
package tags; import java.lang.annotation.Retention; import java.lang.annotation.Target; import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.ElementType.TYPE; import static java.lang.annotation.RetentionPolicy.RUNTIME; **@Inherited** @org.scalatest.TagAnnotation @Retention(RUNTIME) @Target({METHOD, TYPE}) public @interface RequiresIntegrationStuff { }
注释您的基础规范。
@RequiresIntegrationStuff class IntegrationSpec extends FlatSpec {}
只需使用您的基础规格作为基础 class。
class ExampleSpec extends IntegrationSpec { "The Scala language" must "add correctly" in { val sum = 1 + 1 assert(sum === 2) }
之后,ExampleSpec 将被标记为 tags.RequiresIntegrationStuff。
您将在此处找到工作项目:https://github.com/wojda/tags-demo (based on https://github.com/kciesielski/tags-demo from