首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分组测试用例或specs2中等效的“specs2”

分组测试用例或specs2中等效的“specs2”
EN

Stack Overflow用户
提问于 2012-06-01 09:05:37
回答 2查看 594关注 0票数 2

我试图针对一个Java类库编写一堆测试代码,并在Scala上使用specs2。

我有一组测试用例,它们应该为类T的所有子类运行,但无法找到实现这一点的最佳方法。

来自Rspec,我自然地寻找类似于*shared_examples_for*宏的东西,就像在Rspec中一样,但是在specs2中似乎没有这样的东西。

然后我想,用测试用例对我自己的Specification子类进行子类划分可能是一种方法。

有什么更好的解决办法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-01 23:44:51

您可以在用户指南中找到共享示例的示例。基本上,这使用了这样一个事实:您可以定义一个方法,接受一个特定的实例来测试和声明它的示例(请参阅nonEmptyStack方法)。

如果这有帮助的话,让我用一个使用可变Specification的快速示例来启动您。

代码语言:javascript
复制
 import org.specs2._

 class SubclassesSpec extends mutable.Specification {
   "These examples must pass for all subclasses" >> {
     subclasses foreach { subclass => examples(subclass) }
   }

   /** @return instances of subclasses of type T where T is 
    * the supertype of the classes you want to test */
   def subclasses: Seq[T] = ...

   /** @return examples parameterized by a specific instance */
   def examples(t: T) = {
     "this is the first example" >> {
       // use t here
     }
     "this is the second example" >> {
       // use t here
     }
   }
 }

在你做这件事之前,唯一需要检查的是例子之间可能产生的副作用。在上面的规范中,所有的示例都是并发执行的,它们共享同一个对象。如果出现任何问题,您可以:

  • 在规范顶部添加sequential以避免并发性
  • subclassesexamples更改为def subclasses: Seq[() => T]def examples(t: () => T),以便为每个示例创建一个全新的实例
票数 3
EN

Stack Overflow用户

发布于 2012-06-01 21:10:12

它不是specs2,但是ScalaTest有这样的语法:

测试

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10847420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档