在Testng和Java中,我们可以使用DataProvider运行多个测试用例,这是作为单独的测试运行的,这意味着执行测试并没有停止故障。 Scalatest或Specs/Specs2是否有类似物?

有帮助吗?

解决方案

在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

其他提示

该概念在Scalatest中称为“共享测试”,因为多个固定装置正在“共享”相同的测试代码,其中“固定装置”是Testng的DataProvider方法中的“数据”。对于Scalatest中的每个样式特征,有一种方法可以用作函数表达测试。这是WordsPec的示例:

http://www.scalatest.org/scaladoc-1.6.1/#org.scalatest.wordspec@sharedtests

或者,您可以仅使用for loop来为不同的数据点注册相同的测试代码。这是在这里的电子邮件讨论中提出的:

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次测试,每个浏览器驱动程序进行了5项测试。我相信这就是您所追求的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top