【问题标题】:In Scala Specs, what is the "must" function?在 Scala Specs 中,什么是“必须”功能?
【发布时间】:2011-07-21 13:04:04
【问题描述】:

我正在处理一些 Specs 测试,并试图了解“必须”功能是什么,以及它的作用。

我无法在规范源中的任何地方找到它的声明或实现,我正在尝试了解它的作用。

以下是它的一些示例用法:

"hello world".size must be equalTo(11)
"hello world" must be matching("h.* w.*")
stack.push(11) must throwAn[Error]

在我看来,“必须”将函数作为参数,但我想知道“必须”的实际签名,以及它对参数的作用。

谁能指出我正确的方向?

谢谢!

【问题讨论】:

    标签: scala specs


    【解决方案1】:

    至少在Specs2.0中,你会在org.specs2.matcher.MustExpectable找到must的定义

    /**
     * This kind of expectable can be followed by the verb must to apply a matcher:
     * 
     * `1 must beEqualTo(1)`
     * 
     * For convenience, several mustMatcher methods have also been defined as shortcuts to equivalent:
     * 
     * `a must matcher`
     */
    class MustExpectable[T] private[specs2] (tm: () => T) extends Expectable[T](tm) { outer =>
      def must(m: =>Matcher[T]) = applyMatcher(m)
      def must_==(other: =>T) = applyMatcher(new BeEqualTo(other))
      def must_!=(other: =>T) = applyMatcher(new BeEqualTo(other).not)
    }
    object MustExpectable {
      def apply[T](t: =>T) = new MustExpectable(() => t)
    }
    

    MustExpectation trait 在这里声明相关的隐式转换:

    /**
     * This trait provides implicit definitions to transform any value into a MustExpectable
     */
    trait MustExpectations extends Expectations {
      implicit def akaMust[T](tm: Expectable[T]) = new MustExpectable(() => tm.value) {
        override private[specs2] val desc = tm.desc
      }
      implicit def theValue[T](t: =>T): MustExpectable[T] = createMustExpectable(t)
      implicit def theBlock(t: =>Nothing): MustExpectable[Nothing] = createMustExpectable(t)
    
      protected def createMustExpectable[T](t: =>T) = MustExpectable(t)
    }
    object MustExpectations extends MustExpectations
    

    【讨论】:

      【解决方案2】:

      MustMatchers上有文档,mustshould的用法有详细说明。

      【讨论】:

        猜你喜欢
        • 2015-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-21
        • 1970-01-01
        相关资源
        最近更新 更多