junit test suite filtering test cases
En aquest tutorial es parlarà sobre què és una suite de proves JUnit, com es crea una suite de proves i com es poden filtrar els casos de prova a JUnit 4 i JUnit 5:
Al nostre tutorial anterior vam aprendre sobre com ometre alguns casos de prova durant l’execució. També hem conegut diferents anotacions que s’utilitzen a JUnit 4 i JUnit 5 per fer-ho.
En aquest tutorial, aprendrem:
- Què és una suite de proves?
- Com es crea una suite de proves encapsulant diversos casos de prova en un grup i executant la suite mitjançant la classe JUnitCore?
=> Visiteu aquí la sèrie exclusiva de tutorials de formació JUnit.
Què aprendreu:
- Suite de proves JUnit
- Suite de proves de filtratge: JUnit 4 contra JUnit 5
- Conclusió
Suite de proves JUnit
JUnitat 4: @RunWith, @SuiteClasses Annotations
El tutorial Diverses maneres d'executar proves JUnit il·lustrat com es crea un conjunt de proves a JUnitat 4.
Les anotacions @RunWith i @SuiteClasses ens va ajudar a crear un conjunt de proves agrupant diverses classes de proves de JUnit. Posteriorment, un fitxer corredor amb la classe JUnitCore.runclasses () va invocar l'execució del conjunt de proves creat.
Consulteu la secció esmentada per obtenir informació detallada sobre el flux de treball juntament amb el codi real de JUnitat 4.
JUnitat 5: @RunWith, @SelectClasses, @SelectPackages Annotations
La creació d 'un conjunt de proves a JUnitat 5 és bastant similar al que tenim a JUnit 4. Llavors, quina és la diferència?
# 1) En JUnitat 4 , tenim Suite.class que es passa com a paràmetre a @RunWith amb anotació per donar suport a la creació d'una suite de proves mentre que JUnitat 5 utilitza la mateixa anotació @RunWith però amb el paràmetre d'entrada com JUnitPlatform.class en lloc de Suite.class .
Per tant, la línia de codi de la JUnit 5 té l’aspecte @RunWith (JUnitPlatform.class). Aquesta és l’anotació que inclou el vostre subprojecte JUnit Platform.
# 2) En JUnitat 4 , fem servir @SuiteClasses per agrupar diverses classes de JUnit separades per una coma mentre es troba a JUnitat 5 tenim:
- L'anotació @SelectClasses això equival a @SuiteClasses a JUnit 4 per agrupar diverses classes de JUnit.
- @SelectPackages L'anotació s'utilitza per agrupar diverses proves dels paquets. Heu d'introduir un valor de matriu de cadena que representi el paquet que voleu incloure.
Així, en altres paraules,
- Si en cas que vulgueu agrupar casos de prova d’un sol paquet, JUnit 5 us permet fer-ho.
- O, per si de cas, voleu agrupar casos de prova de diversos paquets, JUnit 5 també us dóna suport. Una nota que cal recordar aquí és que les proves de tots els subpaquets del paquet esmentat també s’inclouen al conjunt de proves per defecte.
JUnitat 5: diferents escenaris / exemples
Creació d'una suite de proves que agrupa diverses classes de proves
A continuació es mostra el fragment del codi:
@RunWith(JUnitPlatform.class) @SelectClasses({JUnit5TestCase1.class, JUnit5TestCase2.class }) public class JUnitTestSuite { }
Creació d'una suite de proves per a un paquet únic
A continuació es mostra el fragment del codi:
@RunWith(JUnitPlatform.class) @SelectPackages({“ demo.tests “}) public class JUnit5TestSuite { }
Nota :
- Digues proves demo paquet té un subpaquet demo.tests.subtests.
- El codi @SelectPackages ({'demo.tests'}) també inclourà totes les proves del subembalatge a la suite de proves; per defecte.
- Si ho haguessis declarat @SelectPackages ({'demo.tests.subtests'}) , els casos de prova sota el subembalatge demo.tests.subtests només s’inclourà a la suite de proves, mentre que les proves del seu paquet pare, és a dir, proves demo no s'inclouria.
Creació d'una suite de proves per a diversos paquets
El fragment de codi per crear un conjunt de proves per a diversos paquets separat amb una coma a JUnit 5: es mostrarà com es mostra a continuació:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests”, “demo1.tests”, “demo2.tests”}) public class JUnit5TestSuite { }
Suite de proves de filtratge: JUnit 4 contra JUnit 5
De vegades, hem de filtrar casos de prova i executar un conjunt de proves concretes segons les nostres necessitats. Per exemple, podria haver-hi un conjunt de proves identificades per a proves de regressió, un conjunt separat per a proves unitàries i un conjunt separat de casos de proves per a proves de fum.
Hem d’excloure o incloure casos de prova de determinats paquets o classes o categories. Filtrar o etiquetar les proves des d’un sol paquet és l’única opció amb JUnit4.
En comparació amb JUnit 4, JUnit 5 inclou un bon conjunt de funcions per donar suport a aquesta necessitat de filtrar els casos de prova del paquet únic o de diversos paquets i sub-paquets segons els vostres requisits.
JUnit 4 - @Category, @IncludeCategory, @ExcludeCategory
Els casos de prova de JUnit 4 es poden classificar en diferents categories. Aquestes categories es poden excloure o incloure mentre s'executa el conjunt de proves. Les anotacions @Category, @IncludeCategory i @ExcludeCategory són compatibles amb JUnit 4.12 i versions posteriors.
Els passos d'alt nivell per crear els filtres basats en la categoria o categories són els següents:
# 1) Creeu una interfície de marcador que tingui un paper a la categoria.
# 2) Anoteu els mètodes de prova de les classes que s’inclouran a SuiteClasses amb @Categoria i el nom de la categoria.
# 3) Al fitxer del conjunt de proves, utilitzeu anotació @InclouCategoria amb el nom de la categoria per incloure les proves pertanyents a una categoria específica.
# 4) Al fitxer del conjunt de proves, utilitzeu anotació @ExcludeCategory amb el nom de la categoria per excloure-les.
# 5) L'anotació @Category també es pot utilitzar a nivell de prova o de classe. Si l’anotació s’aplica al nivell de prova, aquesta prova específica s’etiqueta amb la categoria donada, mentre que si l’anotació és a nivell de classe, totes les proves de la classe s’etiqueten a la categoria donada.
Vegem alguns detalls més per entendre la implementació pràctica de classificar les proves i filtrar-les per executar-les:
Pas 1:
Començarem per la creació d’un interfície de marcador que tindrà el paper de categoria per als mètodes de prova. Aquí, creem una categoria anomenada UnitTest . El codi és molt senzill. Consulteu el codi següent.
Codi de UnitTest.java
package demo.tests; public interface UnitTest {}
Pas 2:
Marcarem la categoria a nivell de mètode de prova a la classe JUnitTestCase1.java . Per afegir el cas de prova junitMethod1 () a la categoria UnitTest, hem d’anotar el mètode de prova amb @Category (UnitTest.class) .
Això afegeix el mètode de prova a la categoria UnitTest. Els altres mètodes de prova (si n’hi ha) no s’etiqueten a la categoria tret que s’anotin amb una categoria.
Perquè l’anotació @Category funcioni al nostre codi, hem d’importar el paquet org.junit.experimental.categories.Category
El fragment de codi de JUnitTestCase1.java:
@Category(UnitTest.class) @Test public void junitMethod1(){ int Value2=9000; Assert. assertEquals (Value1, Value2); }
Com a alternativa, un mètode de prova també pot pertànyer a diverses categories Per exemple. : @Category (UnitTest.class, SmokeTest.class)
Pas 3:
Ara voldria marcar la categoria a nivell de classe a la classe JUnitTestCase2.java . La mateixa afirmació que es va afegir a nivell de mètode de prova en el pas anterior també s'afegirà al fitxer de classe actual.
Tingueu en compte que aquí afegirem la declaració a nivell de classe. En fer-ho, tots els mètodes de prova del fitxer pertanyen al fitxer UnitTest Categoria.
El fragment de codi de JUnitTestCase2.java:
@Category(UnitTest.class) @Test public class JUnitTestCase2 { public String stringValue='JUnit';
Pas 4:
què fer amb els fitxers apk
Ara que els nostres casos de prova obligatoris s'han classificat a la categoria UnitTest, ara veurem com afegir-los a la suite de proves filtrant-los en funció de la categoria. Farem certs canvis de codi al fitxer JUnitTestSuite.class per demostrar-ho.
- Categories.class es passarà com a paràmetre a l’anotació @RunWith.
- @ Suite.SuiteClasses prendrà la matriu de cadenes de classes de prova.
- L'anotació @ Categories.IncludeCategory necessitarà UnitTest.class com a paràmetre.
- Aquesta afirmació ens ajudarà a filtrar tota la suite i executar només els casos de prova de la suite que pertany a la categoria.
- Categories.class necessita paquet org.junit.experimental.categories.Categories per importar.
El fragment de codi per a JunitTestSuite.java
@RunWith(Categories.class) @Categories.IncludeCategory(UnitTest.class) @Suite.SuiteClasses({JUnitTestCase1.class, JUnitTestCase2.class}) public class JUnitTestSuite {
L'anotació @ Categories.IncludeCategory també es pot escriure com @InclouCategoria. També podeu crear diverses interfícies (categories) i anotar els mètodes de classe / prova amb diverses categories separades per una coma. A l'exemple següent es filtraran les proves pertanyents a la categoria - Categoria 1 i Categoria 2.
Exemple: @IncludeCategory ({Category1.class, Category2.class})
Hi ha regles similars @ Categories.ExcludeCategory / @ExcludeCategory per excloure els mètodes de prova de la categoria o categories durant la prova.
JUnit 5 - @IncludeTags, @ExcludeTags, @IncludePackages, @ExcludePackages, @IncludeClassNamePatterns, @ExcludeClassNamePatterns
La JUnit 5 inclou diversos enfocaments per organitzar i filtrar els casos de prova.
JUnit 5 - @IncludeTags, @ExcludeTags
# 1) Igual que JUnit 4 té anotacions @IncludeCategory i @ExcludeCategory per donar suport al filtratge de casos de prova per a l'execució.
# 2) JUnit 5 té anotacions @IncludeTags i @ExcludeTags per aconseguir el mateix propòsit.
# 3) La Unitat 4 fa referència als casos de prova que s’organitzen en una categoria específica, mentre que la Unitat 5 es refereix a l’etiquetatge dels casos de prova amb una etiqueta específica per permetre filtrar els casos de prova per a l’execució.
Els passos d'alt nivell per crear els filtres basats en les etiquetes són els següents:
- Anoteu els mètodes de prova dels paquets que s'inclouran a @SelectPackages amb @Etiqueta i el nom de l'etiqueta definit per l'usuari. Una classe pot tenir etiquetes diferents per a diferents mètodes de prova.
- També podeu fer anotacions @Tag a nivell de classe de manera que totes les proves de la classe estiguin etiquetades.
- Al fitxer del conjunt de proves, utilitzeu anotació @IncludeTags amb el nom de l'etiqueta per incloure les proves que pertanyen a una etiqueta específica.
- Al fitxer del conjunt de proves, utilitzeu anotació @ExcludeTags amb el nom de l'etiqueta per excloure-les del conjunt de proves.
Ara tenim una il·lustració detallada sobre com implementar pràcticament el filtratge a JUnit 5.
Pas 1 : Estem etiquetant un mètode de prova a JUnit5TestCase1.java amb el nom de l'etiqueta 'Regressió'
El fragment de codi de JUnit5TestCase1.java:
@Tag(“Regression”) @Test public void junitMethod1(){
Pas 2 : Estem etiquetant un mètode de prova a JUnit5TestCase2.java amb el nom de l'etiqueta 'SmokeTest'.
El fragment de codi de JUnit5TestCase2.java:
@Tag(“SmokeTest”) @Test public void junitMethod2(){
Pas 3: Ara que s’han etiquetat els mètodes de prova, actualitzarem JUnit5TestSuite.java per afegir filtres adequats per etiquetes per a les proves. El codi següent inclou totes les proves etiquetades com a 'Regressió' i exclou totes les etiquetades com a 'Prova de fum'.
El fragment de codi de JUnit5TestSuite.java:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludeTags(“Regression”) @ExcludeTags(“SmokeTest”) public class JUnit5TestSuite { }
JUnit 5 - @IncludePackages, @ExcludePackages
Ja ho sabem quan passem un nom de paquet al fitxer @SelectPackages anotació, les proves dels subpaquets del paquet també s’afegeixen a la suite de proves.
Podrien haver-hi certs paquets secundaris que vulguem incloure a la nostra suite de proves, mentre que alguns altres paquets secundaris que no volem o que poden no ser rellevants s’incloguin a la nostra suite.
Això es facilita mitjançant les anotacions @IncludePackages i @ExcludePackages a JUnit 5.
Suposem que tenim un paquet 'demo.tests' que té tres subpaquets, és a dir, subpaquet 1, subpaquet 2 i subpaquet 3 amb les seves classes de prova en cadascun dels paquets següents.
Vegem un fragment de codi de JUnit5TestSuite.java per visualitzar com incloure i excloure un paquet.
Escenari núm. 1: Apliqueu el filtre per incloure casos de prova només del subpaquet 1.
El codi següent inclou totes les proves de totes les classes JUnit al paquet demo.tests.subpackage1, però, exclou totes les proves directament a sota del paquet demo.test i les que es troben als paquets subpackage2 i subpackage3.
El fragment de codi de JUnit5TestSuite.java:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludePackages(“demo.tests.subpackage1”) public class JUnit5TestSuite { }
Escenari núm. 2: Apliqueu el filtre per excloure casos de prova només del subpaquetatge del paquet3.
El codi següent exclou totes les proves de les classes JUnit del paquet - demo.tests.subpackage3, però la suite inclou totes les proves directament sota el paquet demo.test i les que es troben als paquets subpackage1 i subpackage2.
El fragment de codi de JUnit5TestSuite.java:
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @ExcludePackages(“demo.tests.subpackage3”) public class JUnit5TestSuite { }
JUnit 5 - @IncludeClassNamePatterns, @ExcludeClassNamePatterns
Quan vulgueu incloure o excloure certes classes que coincideixen amb una expressió regular específica del paquet, les anotacions @ IncludeClassNamePatterns i @ ExcludeClassnamePatterns es pot utilitzar al fitxer de classe del paquet de proves.
Vegem ara la il·lustració mitjançant l'actualització del codi a JUnit5TestSuite.java
Escenari núm. 1:
El codi següent inclou classes que acaben amb 'Ctests' del paquet demo.tests
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @IncludeClassNamePatterns({'^.*CTests?$'})
Escenari núm. 2:
Ara exclourem aquelles classes que iniciar amb 'STest' del paquet demo.tests
@RunWith(JUnitPlatform.class) @SelectPackages({“demo.tests“}) @ExcludeClassNamePatterns({'^STest.*$'})
Escenari núm. 3:
També es poden passar diverses expressions regulars com a criteris de filtre. El codi següent estableix dues expressions regulars diferents separades per la O ”Operador. La barra escletxada | és l'operador OR aquí.
assistència tècnica preguntes i respostes d’entrevistes
El codi filtra les classes iniciant amb Prova ( Prova. *) o bé final amb Proves (*. Proves?) i inclou aquestes classes al conjunt de proves a mesura que s’utilitza l’anotació @IncludeClassNamePatterns.
Nota: Si el nom de classe completament qualificat coincideix amb almenys un patró, la classe s'obtindrà segons l'anotació @IncludeClassNamePatterns o @ExcludeClassNamePatterns.
@RunWith (JUnitPlatform.class)
@SelectPackages ({'demo.tests'})
@IncludeClassNamePatterns (. * Proves?) $ ”)
Preguntes freqüents sobre casos de prova de filtratge de JUnit
Aquí teniu una pregunta que potser us persisteix des de fa força temps.
P # 1) Quina diferència hi ha entre desactivar / ignorar una prova i filtrar una prova? Qualsevol de les funcions no pot ajudar a tenir el mateix propòsit d’ometre casos de prova durant l’execució?
Resposta: La pregunta és realment autèntica i val la pena respondre-la.
- Amb la funció de prova de filtrat, també podeu excloure incloure proves en funció de la categoria etiquetada. Tot i que, amb la desactivació, només podeu decidir excloure i no incloure proves d’execució.
- El filtrat dels casos de prova és una mena d’obstinució condicional de casos de prova, mentre que, en el cas de les proves ignorades, s’ometen sense condicions.
- Una altra diferència significativa entre tots dos és que quan executeu els casos de prova amb proves anotades amb @Ignore o @Disabled, les proves ignorades es mostren als resultats de la prova a la secció SALTAT comptar
- Quan executeu les proves filtrades, no apareixen en absolut al resultat de la prova.
Conclusió
En aquest tutorial, hem après a filtrar les proves afegint una categoria / etiqueta a les proves.
A JUnit 4 hem après que tenim @Category, @IncludeCategory i @ExcludeCategory per filtrar els casos de prova, mentre que JUnit 5 té @IncludeTags i @ExcludeTags per fer el mateix.
A més, JUnit 5 té opcions de filtratge addicionals mitjançant anotacions @IncludePackages, @ExcludePackages i també anotacions per incloure o excloure classes mitjançant patrons de nom de classe. Com més explorem; ens adonem que encara hi ha molt més per explorar.
=> Mireu aquí les sèries de formació JUnit senzilles.
Lectura recomanada
- JUnit Ignora el cas de prova: JUnit 4 @Ignore Vs JUnit 5 @Disabled
- Proves JUnit: Com escriure casos de prova JUnit amb exemples
- Llista d’anotacions de JUnit: JUnit 4 Vs JUnit 5
- Tutorial JUnit per a principiants: què és la prova JUnit
- Què és un dispositiu de prova de JUnit: tutorial amb exemples de JUnit 4
- Múltiples maneres d'executar proves JUnit
- Descarregueu, instal·leu i configureu JUnit a Eclipse
- Introducció a JUnit Framework i el seu ús a Selenium Script - Selenium Tutorial # 11