scalamock / specs2:如果我没有断言怎么办?期望仅在隔离模拟工厂中



如果我实际上没有Specs2测试中的count must_== 1 A之类的明确断言,我会遇到一个错误,表明找不到隐式。

// doesn't compile
class Example extends Specification {
  "You need an assertion" >> {
    // hello!
  }
}

足够公平。

但是,如果我也使用Scalamock的MockContext,我可以仅依靠期望而不是断言;模拟事物,Scalamock将验证方法称为etc;

class MockExample extends Specification {
  "I can use 'expectations' here instead" in new MockContext {
    val foo = mock[Foo]
    (foo.bar _).expects(*).once
    // no explicit assertions
  }     
}

但是,如果我尝试通过在IsolatedMockFactory中进行混合来共享上下文设置,那么我会回到编译器故障。有什么想法如何解决?

// doesn't compile
class AnotherMockExample extends Specification with IsolatedMockFactory {
  val foo = mock[Foo]
  "I can't use 'expectations' here any more" >> {        
    (foo.bar _).expects(*).once
  }  
}

Specs2中的一个示例接受任何具有org.specs2.execute.AsResult Typeclass实例的东西。由于(foo.bar _).expects.once是类型CallHandler,因此您可以为CallHandler创建一个AsResult实例,该实例仅评估值并返回Success

 implicit def CallHandlerAsResult[R : Defaultable]: AsResult[CallHandler[R]] = new AsResult {
    def asResult(c: =>CallHandler[R]) = {
      c
      Success
    }
 }

由于失败是基于异常的Scalamock中的例外,如果不满足模拟期望,则应导致异常。

相关内容

  • 没有找到相关文章

最新更新