具有多个测试用例的Scalatest或specs2

use*_*242 10 scala scalatest specs2

在TestNg和Java中,我们可以使用DataProvider运行多个测试用例,这可以作为单独的测试运行,这意味着测试的执行不会在失败时停止.是否有ScalaTest或Specs/Specs2的模拟?

Eri*_*ric 25

在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)
         }
       }
     }
   }
Run Code Online (Sandbox Code Playgroud)

然后输出是:

 A basket must contain fruits
 + it contains: apple
 + it contains: banana
 + it contains: orange
Run Code Online (Sandbox Code Playgroud)

而以下规格:

   class BasketSpecification extends Specification {

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

将打印出如下内容:

 A basket must contain fruits
 + it contains: apple
 x it contains: cake
   'basket' does not contain 'cake'
 + it contains: orange
Run Code Online (Sandbox Code Playgroud)

  • 似乎每个specs2版本都改变了如何在循环中测试示例,这是最新的方式:https://etorreborre.github.io/specs2/guide/SPECS2-3.2/org.specs2.guide.ForLoops.html (4认同)

Bil*_*ers 10

这个概念在ScalaTest中被称为"共享测试",因为相同的测试代码被多个灯具"共享",其中"灯具"是TestNG的DataProvider方法中的"数据".对于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) 
    } 
  } 
} 
Run Code Online (Sandbox Code Playgroud)

这实际上记录了15个测试,每个浏览器驱动程序有5个测试 我相信这就是你所追求的.