Как я могу получить Scalatest, чтобы дать мне одно резюме статистики при тестировании в цикле - PullRequest
0 голосов
/ 01 марта 2012

Я пытаюсь запустить набор тестов для нескольких документов XML. Я хочу получить список идентификаторов продуктов из файла конфигурации, а затем запустить один и тот же набор тестов для каждого документа. Однако, когда я делаю это, я не могу получить ни одного окончательного резюме статистики теста.

Пример кода ниже:

import org.scalatest._
import org.scalatest.matchers.ShouldMatchers._
import scala.xml._
import dispatch._

class xyzSpec(webcli: Http, productId: String) extends FeatureSpec with GivenWhenThen with ShouldMatchers {

    feature("We get up to date xyz data from xyzsystem with correct blahblah info") {
    info("As a programmer")
    info("I want to lookup a product in xyzsystem")
    info("So that I can check the date updated and blahblah info")
    scenario("We have an up to date product with correct blahblah info") {
        given("Product " + productId)
            // code to get product XML doc
        when("when we request the db record")
            // code to get crosscheck data from SQL db
        then("we can get the product record") 
            // code to compare date updated
        and("date updated in the XML matches the SQL db")   

   }
  }

}

val h = new Http

val TestConfXml = h(qaz <> identity)
ProdIdsXml \\ "product" foreach {  (product) =>
    val productId = (product \ "@id").text
    new xyzSpec(h, productId).execute(stats=true)        

}

Третья последняя строка имеет foreach, который вызывает тестового бегуна несколько раз. Я знаю, что могу вкладывать тестовые объекты (или это тестовые классы), но я не вижу, как это сделать динамически во время выполнения, когда конструктор тестового класса принимает параметры.

Чего мне не хватает?

1 Ответ

1 голос
/ 01 марта 2012

Вместо вызова execute для каждого создаваемого вами набора, просто соберите их и верните из nestedSuites набора. И вызовите execute для этого внешнего набора.

scala> import org.scalatest._
import org.scalatest._

scala> class NumSuite(num: Int) extends Suite {
     |   override def suiteName = "NumSuite(" + num + ")"
     | }
defined class NumSuite

scala> val mySuites = for (i <- 1 to 5) yield new NumSuite(i)
mySuites: scala.collection.immutable.IndexedSeq[NumSuite] = Vector(NumSuite@3dc1902d,     NumSuite@6ee09a07, NumSuite@5ba07a6f, NumSuite@4c63c68, NumSuite@72a7d24a)

scala> stats.run(Suites(mySuites: _*))
Run starting. Expected test count is: 0
Suites:
NumSuite(1):
NumSuite(2):
NumSuite(3):
NumSuite(4):
NumSuite(5):
Run completed in 16 milliseconds.
Total number of tests run: 0
Suites: completed 6, aborted 0
Tests: succeeded 0, failed 0, ignored 0, pending 0
All tests passed.

Voila!

...