【问题标题】:Laravel orchestral/testbench issues with MockeryMockery 的 Laravel 管弦乐/测试平台问题
【发布时间】:2016-01-15 18:49:45
【问题描述】:

假设我有两个需要使用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 对象。”(抱歉,但是我忘记了实际的异常)。

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

附:我不确定管弦乐/测试台实际上是否参与了这个问题,我认为这主要是一个嘲弄的事情。

【问题讨论】:

    标签: php unit-testing laravel mockery


    【解决方案1】:

    我现在无法对其进行测试,但您不会错过调用 close() 来停止模拟吗?

    \Mockery::close();
    

    【讨论】:

      猜你喜欢
      • 2014-09-19
      • 1970-01-01
      • 2013-09-08
      • 2019-04-15
      • 2014-03-25
      • 2014-03-12
      • 2014-07-08
      • 2021-03-16
      • 2014-09-05
      相关资源
      最近更新 更多