我正在使用flatspec特性来创建我的测试,我想创建一个基类,它将使用特定标记自动标记该类中的任何测试。
例如,继承自IntegrationTest类的类中的任何测试都将自动进行适当标记。所以而不是:
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)
}
谢谢!
答案 0 :(得分:4)
如果您愿意在测试类而不是父类上使用直接注释,则可以使用https://github.com/kciesielski/tags-demo处的示例。根据您的示例进行了某种改编,您需要声明一个Java类:
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测试类:
@tags.MyAnnotation
class ExampleSpec extends FlatSpec {
"The Scala language" must "add correctly" in {
val sum = 1 + 1
assert(sum === 2)
}
然后,您必须使用实际字符串tags.MyAnnotation
来指定要运行(或忽略)的标记。
我尝试注释一个父类,但我无法让它工作。我可以想象它对你来说是一个重大问题,取决于你想要做什么。
实际上,org.scalatest.Tag类的在线文档可以很好地描述所有这些,尽管我在通过在GitHub上执行上述项目来实现之后的。
答案 1 :(得分:4)
由于可以继承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 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(基于https://github.com/kciesielski/tags-demo的Spiro Michaylov's answer)