Scalatest или specs2 с несколькими тестами - PullRequest
10 голосов
/ 24 июля 2011

В TestNg и Java мы можем запускать несколько тестовых случаев, используя DataProvider, и это выполняется как отдельные тесты, то есть выполнение теста не останавливается при сбое. Есть ли аналог для ScalaTest или Specs / Specs2?

Ответы [ 2 ]

25 голосов
/ 24 июля 2011

Как в ScalaTest, так и в specs2 легко создавать контрольные примеры во время выполнения для параметризации их с помощью данных.Вот пример с specs2:

   class BasketSpecification extends Specification {

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

Тогда вывод будет:

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

Тогда как следующая спецификация:

   class BasketSpecification extends Specification {

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

Распечатает что-то вроде:

 A basket must contain fruits
 + it contains: apple
 x it contains: cake
   'basket' does not contain 'cake'
 + it contains: orange
10 голосов
/ 24 июля 2011

Эта концепция называется «общими тестами» в ScalaTest, поскольку один и тот же код теста «разделяется» несколькими приборами, где «данные» - это «данные» в подходе DataProvider TestNG. Есть способ сделать это для каждой черты стиля в ScalaTest, которая выражает тесты как функции. Вот пример для WordSpec:

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

Вы также можете просто использовать цикл for, чтобы зарегистрировать один и тот же тестовый код для разных точек данных. Это возникло в обсуждении по электронной почте, которое здесь:

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

Код цикла for в этом случае выглядит так:

  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) 
    } 
  } 
} 

На самом деле регистрируется 15 тестов, по пять тестов для каждого драйвера браузера. Я верю, что это то, что вам нужно.

...