Po pierwsze, w przypadku, gdy istnieje prostszy sposób rozwiązania tego problemu, oto zarys tego, co próbuję osiągnąć. Chcę opisać moje metody testowe za pomocą adnotacji KnownIssue (rozszerzenie AbstractAnnotationDrivenExtension), która pobiera identyfikator defektu jako parametr i sprawdza stan defektu przed wykonaniem testów. Jeśli defekt zostanie naprawiony, będzie kontynuował wykonywanie, jeśli nie zostanie naprawiony, chcę go zignorować, ale jeśli jest zamknięty lub usunięty, chcę wywołać niepowodzenie testu z logowaniem stwierdzające, że test powinien zostać usunięty lub zaktualizowany i adnotację usunięto, ponieważ usterka jest teraz zamknięta lub usunięta.W jaki sposób można uzyskać spock do wykonania innej metody w środowisku wykonawczym za pomocą rozszerzenia opisów?
Mam wszystko, co działa, aż do wywołania awarii testu. To, czego próbowałem, nie działa:
- Zgłaszanie wyjątku w metodzie visitFeatureAnnotation, która powoduje błąd, który powoduje, że wszystkie testy nie będą wykonywane.
- Utworzenie klasy rozszerzającej specyfikację i obejmującej metodę testowania, która rejestruje komunikat i kończy się niepowodzeniem, a następnie spróbowała użyć metody feature.featureMethod.setReflection() w celu ustawienia metody do wykonania w innej metodzie. W tym przypadku otrzymuję obiekt java.lang.IllegalArgumentException: obiekt nie jest instancją deklarowania klasy
- Następnie spróbowałem użyć metody ExpandoMetaClass w celu dodania metody bezpośrednio do deklarującej klasy i wskazania punktu feature.featureMethod.setReflection, ale wciąż mam ten sam wyjątek IllegalArgumentException.
Oto co mam w środku mojego sposobu visitFeatureAnnotation dla mojej ostatniej próbie:
def myMetaClass = feature.getFeatureMethod().getReflection().declaringClass.metaClass
myMetaClass.KnownIssueMethod = { -> return false }
feature.featureMethod.setReflection(myMetaClass.methods[0].getDoCall().getCachedMethod());
Wszelkie inne pomysły jak mogę to osiągnąć, i albo wywołać awarię testową, lub zastąpić metodę z inny, który się nie powiedzie?