Per prima cosa, nel caso in cui vi sia un modo più semplice per risolvere questo problema, ecco una descrizione di ciò che sto cercando di realizzare. Voglio annotare i miei metodi di prova con un'annotazione KnownIssue (che estende AbstractAnnotationDrivenExtension) che accetta un ID difetto come parametro e controlla lo stato del difetto prima dell'esecuzione dei test. Se il difetto è corretto, continuerà l'esecuzione, se non è fisso, voglio che ignori il test, ma se è chiuso o cancellato, voglio indurre un errore di test con la registrazione che indica che il test deve essere rimosso o aggiornato e l'annotazione rimossa dal momento che il difetto è ora chiuso o cancellato.Come posso ottenere a spock l'esecuzione di un metodo diverso in fase di esecuzione utilizzando un'estensione annotazione?
Ho tutto funzionante fino all'induzione di un errore di test. Quello che ho provato non funziona:
- Lanciare un'eccezione nel metodo visitFeatureAnnotazione, che causa un errore che causa non tutti i test da quel momento in poi non eseguiti.
- Creazione di una classe che estende Spec e che include un metodo di prova che registra un messaggio e non riesce, quindi ha provato a utilizzare feature.featureMethod.setReflection() per impostare il metodo da eseguire sull'altro metodo. In questo caso, ottengo un java.lang.IllegalArgumentException: object non è un'istanza di dichiarare la classe
- Ho quindi provato a utilizzare ExpandoMetaClass per aggiungere un metodo direttamente a dichiaringClass e puntare feature.featureMethod.setReflection per puntare ad esso, ma ottengo ancora la stessa IllegalArgumentException.
Ecco quello che ho dentro del mio metodo visitFeatureAnnotation per il mio ultimo tentativo:
def myMetaClass = feature.getFeatureMethod().getReflection().declaringClass.metaClass
myMetaClass.KnownIssueMethod = { -> return false }
feature.featureMethod.setReflection(myMetaClass.methods[0].getDoCall().getCachedMethod());
Tutte le altre idee su come potrei fare questo, e sia indurre un fallimento del test, o sostituire il metodo con un altro che fallirà?