注释排除不适用于 sbt test/testOnly
Exclusion by annotation not working for sbt test/testOnly
考虑以下 org.scalatest.TagAnnotation
subclass:
public class TestSizeTags {
/** Tests with crazy long runtimes **/
@org.scalatest.TagAnnotation
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public static @interface HugeTestClass {}
}
让我们annotate
/tag
一个class一起吧:
@HugeTestClass
class ItemsJobTest extends FunSuite with BeforeAndAfterEach with DataFrameSuiteBase {
现在我们想要快速 "smoke test suite" 代码库;因此,让我们(尝试)排除由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
将 Tag Filter(/Exclusion)
应用到 scalatest
classes 的正确语法/方法是什么?
您错过了将 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 问题很有帮助 - https://github.com/harrah/xsbt/issues/357#issuecomment-44867814
但它不适用于静态标签注释,
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"
考虑以下 org.scalatest.TagAnnotation
subclass:
public class TestSizeTags {
/** Tests with crazy long runtimes **/
@org.scalatest.TagAnnotation
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public static @interface HugeTestClass {}
}
让我们annotate
/tag
一个class一起吧:
@HugeTestClass
class ItemsJobTest extends FunSuite with BeforeAndAfterEach with DataFrameSuiteBase {
现在我们想要快速 "smoke test suite" 代码库;因此,让我们(尝试)排除由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
将 Tag Filter(/Exclusion)
应用到 scalatest
classes 的正确语法/方法是什么?
您错过了将 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 问题很有帮助 - https://github.com/harrah/xsbt/issues/357#issuecomment-44867814
但它不适用于静态标签注释,
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"