假设我有两个需要使用Foo
对象的测试用例。
在第一个测试用例中,我需要Foo
进行模拟,所以我正在做
class TestCaseA extends \Orchestra\Testbench\TestCase {
function testA() {
$foo = \Mockery::mock('Foo')->shouldReceive('baz')->once();
Something::method_That_Uses_A_Dependency_Injected_Foo();
}
}
在第二个测试用例中,我需要真正的Foo
实现,所以我正在做
class TestCaseB extends \Orchestra\Testbench\TestCasez
function testB() {
$foo = new Foo();
$foo->baz();
}
}
首先运行TestCaseA
时TestCaseB
失败,因为它实际上是在使用模拟实例而我得到了
BadMethodCallException: Method Foo::baz() does not exist on this mock object
相反,当TestCaseB
首先运行时,我从Mockery那里得到一个异常,它说明了“无法创建模拟,因为已经加载了真正的Foo对象。”(抱歉,但我忘记了实际的例外情况。)
我认为我需要的是测试用例自动加载器之间的一种隔离,但我不知道如何实现这一点。任何提示?
P.S。我不确定管弦乐/测试平台是否真的涉及到这个问题,我认为它主要是一个Mockery的东西。
答案 0 :(得分:0)
我现在无法测试它,但你是否错过了关闭()来停止嘲笑的调用?
\Mockery::close();