Scalamock:如何使用重复参数模拟柯里德方法



我试图嘲笑awscala.dynamodbv2.DynamoDB.putConditionalMethod如何定义对包含重复参数的方法的期望:

putConditional(tableName: String, attributes: (String, Any)*)(cond: Seq[(String, aws.model.ExpectedAttributeValue)]): Unit

这是我的工作:

(mockClient.putConditional(_: String, _: (String, Any))(_: Seq[(String, ExpectedAttributeValue)]))
    .expects("Data-Identity-Partitions", 
      *,
      Seq(
        "DatacenterId" -> exp.isNull,
        "InstanceId" -> exp.isNull,
        "TTL" -> exp.isNull
      ))

但是这个:

(mockClient.putConditional(_: String, _: (String, Any))(_: Seq[(String, ExpectedAttributeValue)]))
    .expects("Data-Identity-Partitions",
      Seq("DatacenterId" -> 1,
        "InstanceId" -> 0,
        "TTL" -> System.currentTimeMillis()),
      Seq(
        "DatacenterId" -> exp.isNull,
        "InstanceId" -> exp.isNull,
        "TTL" -> exp.isNull
      ))

导致以下编译器错误:

[error] AwsPartitionActorSpec.scala:76: type mismatch;
[error]  found   : Seq[(String, Any)]
[error]  required: org.scalamock.matchers.MockParameter[(String, Any)]
[error]           Seq[(String, Any)]("DatacenterId" -> 1,
[error]                             ^

我想迟到总比没有好,这是我的建议:

  trait testtrait {
    def foo(t: String, a: (String, Any) *): Int
  }
  "foo" should "work" in {
    val m = mock[testtrait]
    m.foo _ expects where {
      case ("foo", Seq(("bar", 42L), ("baz", "mango"))) => true
      case _ => false
    } returns 5

    m.foo("foo", ("bar", 42L), ("baz", "mango")) should be (5)
  }

相关内容

  • 没有找到相关文章