Domanda

In TestNG e Java, siamo in grado di eseguire più casi di test che utilizzano DataProvider, e questo viene eseguito come test separati, cioè l'esecuzione di un test non viene fermato in caso di fallimento. Esiste un analogo per ScalaTest o Spec / Specs2?

È stato utile?

Soluzione

In entrambi ScalaTest e specs2, è facile creare casi di test in fase di esecuzione, al fine di parametrizzare loro dati. Ecco un esempio con specs2:

   class BasketSpecification extends Specification {

     "a basket must contain fruits" >> {
       Seq(apple, banana, orange) foreach { fruit => 
         ("it contains: " + fruit) >> {
           basket must contain(fruit)
         }
       }
     }
   }

L'uscita è:

 A basket must contain fruits
 + it contains: apple
 + it contains: banana
 + it contains: orange

considerando che le seguenti specifiche:

   class BasketSpecification extends Specification {

     "a basket must contain fruits" >> {
       Seq(apple, cake, orange) foreach { fruit => 
         ("it contains: " + fruit) >> {
           basket must contain(fruit)
         }
       }
     }
   }

stamperà qualcosa come:

 A basket must contain fruits
 + it contains: apple
 x it contains: cake
   'basket' does not contain 'cake'
 + it contains: orange

Altri suggerimenti

Questo concetto è chiamato "test condivisi" in ScalaTest, perché lo stesso codice di prova è "condivisa" da più dispositivi, in cui "apparecchi" sono i "dati" nell'approccio DataProvider di TestNG. C'è un modo per fare questo per ogni tratto di stile nella ScalaTest che esprime i test come funzioni. Ecco un esempio per WordSpec:

http://www.scalatest.org/scaladoc-1.6.1/ #org.scalatest.WordSpec@SharedTests

E 'possibile in alternativa, basta usare un ciclo for per registrare lo stesso codice di prova per i diversi punti di dati. Ciò è avvenuto in una discussione e-mail che è qui:

http://groups.google.com/group/scalatest-users/browse_thread/ filo / 7337628407b48064 #

Il codice ciclo in quel caso sembrava:

  for (browser <- List("IE", "Chrome", "Firefox")) { 
    test(browser + ": test one") { driver => 
      info("Testing using " + driver) 
    } 
    test(browser + ": test two") { driver => 
      info("Testing using " + driver) 
    } 
    test(browser + ": test three") { driver => 
      info("Testing using " + driver) 
    } 
    test(browser + ": test four") { driver => 
      info("Testing using " + driver) 
    } 
    test(browser + ": test five") { driver => 
      info("Testing using " + driver) 
    } 
  } 
} 

Ciò registra in realtà 15 test, cinque prove per ogni driver del browser. Questo credo sia quello che stai cercando.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top