注释排除不适用于sbt测试/仅测试
考虑以下注释排除不适用于sbt测试/仅测试,sbt,scalatest,Sbt,Scalatest,考虑以下org.scalatest.TagAnnotation子类: public class TestSizeTags { /** Tests with crazy long runtimes **/ @org.scalatest.TagAnnotation @Inherited @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD, ElementType.TYPE})
org.scalatest.TagAnnotation
子类:
public class TestSizeTags {
/** Tests with crazy long runtimes **/
@org.scalatest.TagAnnotation
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public static @interface HugeTestClass {}
}
让我们用它来注释一个类:
@HugeTestClass
class ItemsJobTest extends FunSuite with BeforeAndAfterEach with DataFrameSuiteBase {
现在我们需要一个快速的代码库“烟雾测试套件”;因此,让我们(尝试)排除由HugeTestClass
注释的测试用例:
命令行:
sbt test * -- -l HugeTestClass
或者可能:
sbt 'testOnly * -- -l HugeTestClass'
让我们也在sbt内部尝试一下:
sbt> testOnly * -- -l HugeTestClass
在上述所有情况下,我们(不幸)仍然看到:
[info] ItemsJobTest:
^C[info] - Run Items Pipeline *** FAILED *** (2 seconds, 796 milliseconds)
所以测试确实运行了。。与本意相反
那么,通过
sbt
向scalatest
类应用标记过滤器(/Exclusion)
的正确语法/方法是什么呢?您没有将testOnly
部分放在双引号中,也没有给标记注释提供完整的包以忽略
sbt "test-only * -- -l full.package.to.HugeTestClass"
例如
标记注释
package tags;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@org.scalatest.TagAnnotation
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface ExcludeMePleaseTag {}
排除的测试
@tags.ExcludeMePleaseTag
class ExcludeMeSpecs extends FlatSpec with Matchers {
"I" should " not run" in {
888 shouldBe 1
}
}
排除测试
sbt "test-only * -- -l tags.ExcludeMePleaseTag"
这个github问题很有帮助-
但它不适用于静态标记注释,
public class WrapperClass {
@org.scalatest.TagAnnotation
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public static @interface ExcludeMePleaseTag {
}
}
sbt "test-only * -- -l tags.WrapperClass.ExcludeMePleaseTag"
我使用scala
Tag
来包括或排除,例如对象HugeTestClassTag扩展org.scalatest.Tag(“DatabaseTest”)
然后将HugeTestClassTag
添加到我的测试方法中。顺便问一下,HugetTestClass
对你来说应该是静态类吗?@prayagupd是的,它是静态的:更新了OP以显示它是一个内部类尝试将你的testOnly部分放在双引号中,同时给标记完整的包以忽略。@prayagupd Same behavior.Dammit。我贴了一个工作示例作为回答。那里也一样吗?这对我有用。执行时缺少两件事:1)”
和2)HugetTestClass的完整包。感谢您提供的信息:将作为顶级而非内部类尝试标记。好朋友,scala在某些情况下不喜欢静态,但我对此没有很好的解释。为什么--
在sbt中“仅测试*--l标记。ExcludeMePleaseTag”
?如果我没有在sbt命令中指定--
,标记的测试不会被排除。@TarangBhalodia--
告诉仅测试命令没有更多的测试类参数,允许将-l标记。ExcludeMePleaseTag
作为选项传递。