2017-10-19 6 views
0

Je me demande comment je peux obtenir la valeur booléenne d'une annotation spock IgnoreIf.Comment obtenir le résultat de fermeture d'annotation Spock

Par exemple, dans mon script que je peut avoir quelque chose comme ceci:

@IgnoreIf({someBooleanMethod()}) 
def "Some Feature Method"(){ 
    // code and stuff 
} 

J'ai aussi une extension spock personnalisée. Dans ce extention j'ai ceci:

//iterates over each feature method in a spec 
for (FeatureInfo feature : spec.getFeatures()){ 
    if(feature.getFeatureMethod().reflection.isAnnotationPresent(IgnoreIf.class)&&feature.getFeatureMethod().reflection.getAnnotation(IgnoreIf.class).value()){ 
     //some more code goes here 
    } 
} 

Je veux évaluer la fermeture IgnoreIf pour chaque méthode de fonctionnalité qui contient une fermeture IgnoreIf. Si je ne me trompe pas, feature.getFeatureMethod().reflection.getAnnotation(IgnoreIf.class).value() devrait me donner le clou de l'annotation donnée, mais je ne sais pas comment évaluer réellement le someBooleanMethod J'ai à l'intérieur de la fermeture pour voir si c'est vrai ou faux. Comment je fais ça?

+0

Il suffit de regarder le code de l'extension org.spockframework.runtime.extension.builtin.IgnoreIfExtension –

+0

@Leonard Brünings Je suppose que vous faites référence à la 'evaluateCondition 'méthode trouvée dans cette classe. C'est une méthode non statique, donc comment obtenir une instance de cet objet afin que je puisse appeler cette méthode – switch201

Répondre

0

new IgnoreIfExtension().visitFeatureAnnotation(feature.getFeatureMethod().reflection.getAnnotation(IgnoreIf.class), feature)

C'est ce que je faisais. Si la condition IgnoreIf est vraie, il sera mis à sauter seul