假设我有这个接口和类:
abstract class SomeInterface{ def doSomething : Unit } class ClassBeingTested(interface : SomeInterface){ def doSomethingWithInterface : Unit = { Unit } }
请注意,doSomethingWithInterface方法实际上不对接口执行任何操作.
我为它创建了一个测试:
import org.specs2.mutable._ import org.specs2.mock._ import org.mockito.Matchers import org.specs2.specification.Scope trait TestEnvironment extends Scope with Mockito{ val interface = mock[SomeInterface] val test = new ClassBeingTested(interface) } class ClassBeingTestedSpec extends Specification{ "The ClassBeingTested" should { "#doSomethingWithInterface" in { "calls the doSomething method of the given interface" in new TestEnvironment { test.doSomethingWithInterface there was one(interface).doSomething } } } }
这个测试通过.为什么?我设置错了吗?
当我摆脱范围:
class ClassBeingTestedSpec extends Specification with Mockito{ "The ClassBeingTested" should { "#doSomethingWithInterface" in { "calls the doSomething method of the given interface" in { val interface = mock[SomeInterface] val test = new ClassBeingTested(interface) test.doSomethingWithInterface there was one(interface).doSomething } } } }
测试按预期失败:
[info] x calls the doSomething method of the given interface [error] The mock was not called as expected: [error] Wanted but not invoked: [error] someInterface.doSomething();
这两个测试有什么区别?为什么第一个应该失败时通过?这不是Scopes的预期用途吗?