2017-06-14 161 views
0

考虑以下org.scalatest.TagAnnotation子类:排除通过注释不工作的SBT测试/ testOnly

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与它的类:

@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) 

所以测试实际上运行..违背意愿。

那么,通过sbtscalatest类应用Tag Filter(/Exclusion)类的正确语法/方法是什么?

+0

我有使用scala标签来包含或排除,例如。 '对象HugeTestClassTag扩展org.scalatest.Tag(“DatabaseTest”)''然后添加'HugeTestClassTag'到我的测试方法中。顺便应该'HugeTestClass'为你的静态类吗? – prayagupd

+0

@prayagupd是的,它是静态的:更新OP显示它是一个内部类 – javadba

+0

尝试把你的testOnly部分放在双引号中,也给完整的包让Tag忽略。 – prayagupd

回答

2

你错过了把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" 
+0

感谢您的信息:将标签作为顶级而不是内部类。 – javadba

+0

太棒了。应该以这种方式工作。 – prayagupd

+0

工程。谢幕。 – javadba