Răspunsul se face printr-un org.testng.IMethodSelector personalizat:
Metoda sa includeMethod() poate exclude orice metodă pe care o dorim, ca o metodă publică care nu este adnotată.
Cu toate acestea, pentru a înregistra un Java MethodSelector personalizat, trebuie să-l adăugați în XMLTest instanța gestionată de orice TestRunner, ceea ce înseamnă că aveți nevoie de propriul TestRunner personalizat .
Dar, pentru a construi un TestRunner personalizat, trebuie să înregistrați un TestRunnerFactory , prin opțiunea -testrunfactory .
DAR NU TREBUIE luată în considerare de către TESTNG clasa ... TESTNG astfel că trebuie să definiți și o clasă TestNG personalizată:
- pentru a suprascrie metoda de configurare (Map),
- astfel încât să puteți seta TestRunnerFactory
- TestRunnerFactory, care vă va construi un TestRunner personalizat,
- TestRunner care va seta instanței XMLTest un XMLMethodSelector personalizat
- XMLMethodSelector care va construi un IMethodSelector personalizat
- IMethodSelector care va exclude orice metodă TestNG aleasă de dvs.!
Ok ... e un coșmar. Dar este și o provocare a codului, deci trebuie să fie puțin provocatoare;)
Tot codul este disponibil la Fragmente DZone .
Ca de obicei, pentru o provocare de cod:
- o clasă java (și câteva clase interioare)
- copiați-pastrați clasa într-un director "sursă/test" (deoarece pachetul este "test")
- rulați-l (nu aveți nevoie de argumente)
Actualizare de la Mike Stone:
Am de gând să accept acest lucru, pentru că sună destul de aproape de ceea ce am făcut, dar m-am gândit să adaug ceea ce am făcut și eu.
Practic, am creat o adnotare de grup care se comportă ca proprietatea grupurilor din adnotările Test (și alte).
Apoi, am creat un GroupsAnnotationTransformer, care utilizează IAnnotationTransformer pentru a examina toate testele și clasele de test fiind definite, apoi modifică testul pentru a adăuga grupurile, care funcționează perfect cu excluderea și includerea grupurilor.
Modificați construirea pentru a folosi noul transformator de adnotare și totul funcționează perfect!
Ei bine ... una dintre avertismente este că nu adaugă grupurile la metode non-test ... pentru că în momentul în care am făcut acest lucru, a existat un alt transformator de adnotări care vă permite să transformați NICIUNEA, dar într-un fel nu a fost inclus în TestNG pe care o foloseam dintr-un anumit motiv ... deci este o idee bună să îmi faci mereu înainte/după metodele adnotateRun = adevărat ... ceea ce este suficient pentru mine.
Rezultatul final este că pot să fac:
@Groups({ "myGroup1", "myGroup2"})
public class MyTestCase {
@Test
@Groups("aMethodLevelGroup")
public void myTest() {
}
}
Și am făcut transformatorul să lucreze cu subclasarea și totul.