2017-06-14 1 views
0

Considérez la sous-classe org.scalatest.TagAnnotation suivante:Exclusion par l'annotation ne fonctionne pas pour le test de 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 {} 

} 

Laissez-nous annotate/tag une classe avec elle:

@HugeTestClass 
class ItemsJobTest extends FunSuite with BeforeAndAfterEach with DataFrameSuiteBase { 

Maintenant, nous voulons un rapide « fumée suite de tests "sur la base de code; Par conséquent, laissez-nous (tentative) à exclure les testcases annotés par HugeTestClass:

Ligne de commande:

sbt test * -- -l HugeTestClass 

ou peut-être:

sbt 'testOnly * -- -l HugeTestClass' 

Tentons aussi dans les SBT lui-même:

sbt> testOnly * -- -l HugeTestClass 

Dans tous cas ci-dessus, nous (malheureusement) voir encore:

[info] ItemsJobTest: 
^C[info] - Run Items Pipeline *** FAILED *** (2 seconds, 796 milliseconds) 

Donc, le test fait a fait run .. contrairement à l'intention.

Alors, quelle est la syntaxe/approche correcte pour appliquer une classe Tag Filter(/Exclusion) via sbt à scalatest?

+0

Je scala 'Tag' utilisé pour inclure ou exclure, par exemple. 'object HugeTestClassTag étend org.scalatest.Tag (" DatabaseTest ")' puis ajoute "HugeTestClassTag' à mes méthodes de test. En passant, est-ce que 'HugeTestClass' devrait être une classe statique pour vous? – prayagupd

+0

@prayagupd Oui c'est statique: mise à jour de l'OP pour montrer qu'il s'agit d'une classe interne – javadba

+0

essayez de mettre votre partie testOnly en guillemets doubles, donnez aussi le paquet complet à Tag pour l'ignorer. – prayagupd

Répondre

2

Vous avez manqué de mettre la partie testOnly en guillemet et aussi donner package complet à l'annotation Tag ignorer,

sbt "test-only * -- -l full.package.to.HugeTestClass" 

exemple,

Tag annotation

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 {} 

Test pour exclure

@tags.ExcludeMePleaseTag 
class ExcludeMeSpecs extends FlatSpec with Matchers { 

    "I" should " not run" in { 

    888 shouldBe 1 
    } 

} 

pour exclure les essais

sbt "test-only * -- -l tags.ExcludeMePleaseTag" 

Cette question github a été utile - https://github.com/harrah/xsbt/issues/357#issuecomment-44867814

Mais il ne fonctionne pas avec l'annotation statique Tag,

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

Merci pour l'info: va essayer le Tag comme niveau supérieur et non interne. – javadba

+0

Génial. Devrait fonctionner de cette façon. – prayagupd

+0

fonctionne. Inclinez-vous. – javadba