首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Specs2单位规范参考

Specs2单位规范参考
EN

Stack Overflow用户
提问于 2019-07-18 19:37:33
回答 1查看 50关注 0票数 0

我有以下规范:

代码语言:javascript
复制
import org.specs2.mutable.{After, Specification}
import org.specs2.specification.Scope
import org.specs2.specification.core.{Fragment, Fragments}

class TestRefSpec extends Specification {

  "My Spec" >> new iii {
    xxx(i)
  }

  def xxx(i: Int) = {
    def e1 = {
      println(s"** $i > 0")
      i must be_>(0)
    }
    def e2 = {
      println(s"** $i < 100")
      i must be_<(100)
    }

    "i should be > 0" >> { e1 } 
    "and < 100" >> { e2 }
  }

}

trait iii extends Scope with After {
  val i = 142

  def after = println("finalising")
}

这个想法是,有一个规范来测试某物的行为,然后有一个由测试行为的范围所代表的目标。理想情况下,这些行为应该位于一个单独的特征中。遗憾的是,当我运行它时,我得到的输出如下:

代码语言:javascript
复制
[info] TestRefSpec
[info] + My Spec
[info] Total for specification TestRefSpec
[info] Finished in 560 ms
[info] 1 example, 0 failure, 0 error

这意味着测试不会真正运行。

有人知道我如何真正实现我想要的吗?

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-18 20:00:09

我认为问题在于您将xxx(i)方法调用包装在一个new iii {}中。

这是行不通的,因为curlies中的代码是在扩展iii的新匿名类的构造函数中执行的,并且整个表达式的结果是iii的子类型,而不是Fragments,因此从xxx()方法内部构造和返回的示例的内部结构不能用于specs2 >>运算符。通常情况下,只有单个示例前面有- specs2 in运算符才会被包装在一个作用域中。

这将会起作用:

代码语言:javascript
复制
class TestRefSpec extends Specification {

  "My Spec" >> {
    xxx(42)
  }

  def xxx(i: Int) = {
    def e1 = {
      println(s"** $i > 0")
      i must be_>(0)
    }
    def e2 = {
      println(s"** $i < 100")
      i must be_<(100)
    }

    "i should be > 0" in new iii { e1 }
    "and < 100" in new iii { e2 }
  }

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

https://stackoverflow.com/questions/57093579

复制
相关文章

相似问题

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