首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala spec2 object.productID must_== "123“失败

Scala spec2 object.productID must_== "123“失败
EN

Stack Overflow用户
提问于 2013-04-28 23:10:53
回答 1查看 570关注 0票数 2

我已经更新了我的问题,删除了旧文本以使其更容易阅读。

代码语言:javascript
复制
scalaVersion  := "2.10.1"
"org.specs2"          %%  "specs2"        % "1.13" % "test"

我的spec2测试:

代码语言:javascript
复制
package com.mycompany.dataminer.parser

import org.specs2.mutable.Specification

case class Product(productID:String)

class SimpleTest  extends Specification {

  "product" should {

    "have id = 123" in {
      var product1 = Product("123")
      product1 must not beNull
      product1.productID must_== "123"

      var product2 = Product("123")
      product2 must not beNull
      product2.productID must_== "123"

      var product3 = Product("123")
      product3 must not beNull
      product3.productID must_== "123"
    }
  }

}

结果:

代码语言:javascript
复制
scala: type mismatch;
 found   : String
 required: org.specs2.matcher.Matcher[com.mycompany.dataminer.parser.Product]
      product1.productID must_== "123"
               ^

一旦我写了这段代码,它就可以工作了,直到我添加了下面这几行:

代码语言:javascript
复制
product1 must not beNull
product2 must not beNull
product3 must not beNull
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-29 06:37:18

这是Scala的表达式解析(半列推断)和specs2对匹配器建模的方式的问题。

具有第一个匹配器的行product1 must not beNull被解释为product1.must(not) beNull。这意味着beNull处于没有参数的方法调用的位置,但是如果它有参数,那么它们必须是Matcher[Product]类型。这是因为整个表达式都是MatchResult[Product]类型,并且MatchResult特征有一个apply方法。

结果是Scala推断第一行表达式的参数在第二行,product1.productID的类型是String,这是意外的。

对于这种情况,有3种解决方法:

  • 换行符

product1不能beNull product1.productID must_== "123"

  • a semi column

product1不能beNull;product1.productID must_== "123"

  • a parenthetised not

product1不能(BeNull) product1.productID must_== "123"

这将在下一个specs2版本中得到缓解,方法是将MatchResult[T].apply方法设置为私有,以便将编译错误转换为method apply in trait MatchResult cannot be accessed in org.specs2.matcher.MatchResult[Product],并在Scaladoc中添加对此方法的潜在问题的描述。

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

https://stackoverflow.com/questions/16264269

复制
相关文章

相似问题

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