【问题标题】:How to add mocked expectations to a class under test如何将模拟期望添加到被测类
【发布时间】:2011-08-16 00:44:21
【问题描述】:

要测试的代码

abstract class Parent
{
    public function getSomething(){} //this has to be mocked
}

class Child extends Parent
{
    public function methodWhichIsTested()
    {
        $something = $this->getSomething(); //call to parent method
    }
}

测试

public function setUp()
{
    $this->child = new Child;
}

public function testTheChildMethod()
{
    $this->child->methodWhichIsTested();
}

如何向实例化类 Child 添加模拟期望? 我想做类似的事情:

MockFramework->takeExistingClass('Child')->shouldRecieve('getSomething')->andReturn('whatever');

我的问题是,在实际情况(不是示例)中,getSomething 方法返回一个依赖项,我需要对其进行模拟!

我正在使用 Mockery,但如果您知道如何使用 phpUnit 模拟来做到这一点,请继续!也许我犯了一个基本的思维错误,请帮帮我!谢谢。

【问题讨论】:

    标签: php mocking phpunit


    【解决方案1】:

    After you clarfied in chat 表示getSomething 的返回值包含一个依赖关系,即

    抽象类的受保护属性,它通过抽象的另一个公共方法注入到该抽象中

    解决方案是通过其他方法注入该依赖项的模拟

    一般来说,您永远不需要模拟或存根 TestSubject 的行为。只有当您查找全局范围或在 TestSubject 中创建混合/硬代码对象时,您可能会看到需要这样做,但这些将是代码异味,应该被重构。请参阅 Sebastian Bergmann 关于不可测试代码的文章:

    【讨论】:

    • 是的,在聊天中澄清之后,我觉得有点傻:)
    猜你喜欢
    • 2020-10-27
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    相关资源
    最近更新 更多