Laravel管弦乐/测试台与Mockery有关

时间:2015-10-16 22:07:48

标签: php unit-testing laravel mockery

假设我有两个需要使用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();
    }
}

首先运行TestCaseATestCaseB失败,因为它实际上是在使用模拟实例而我得到了

BadMethodCallException: Method Foo::baz() does not exist on this mock object

相反,当TestCaseB首先运行时,我从Mockery那里得到一个异常,它说明了“无法创建模拟,因为已经加载了真正的Foo对象。”(抱歉,但我忘记了实际的例外情况。)

我认为我需要的是测试用例自动加载器之间的一种隔离,但我不知道如何实现这一点。任何提示?

P.S。我不确定管弦乐/测试平台是否真的涉及到这个问题,我认为它主要是一个Mockery的东西。

1 个答案:

答案 0 :(得分:0)

我现在无法测试它,但你是否错过了关闭()来停止嘲笑的调用?

\Mockery::close();