phpunit和模拟许多依赖的对象

时间:2016-04-24 13:17:06

标签: mocking phpunit fixtures stub

我只是想了解"正确的方式"在下列情况下编写单元测试:

class Time
{
    public function __construct(Hour $h, Minute $m, Second $s) {}
}

class TimeRange
{
    public function __construct(Time $start, Time, $end)
    {
        if ($this->startTime > $this->endTime) {
            throw new \Exception;
        }
    }
}

目的是为TimeRange构造函数方法实现单元测试,这将有助于确保异常在某个时刻抛出

如果在这种情况下正确获取时间对象的模拟(没有获得模拟意大利面)?

1 个答案:

答案 0 :(得分:0)

模拟创作可能会变得非常复杂。在生产代码中,复杂的任务由专门的类或模块处理。在这种情况下,它是相同的。您可以而且应该在类中抽象存根和模拟创建。这些类应该是测试套件的一部分。

以你的情况为例。你可以让一个类返回一个#texto h1 { margin:auto; line-height:51px; position: absolute; left: 50%; transform: translate(-50%, -100%); vertical-align:middle; color: #FFFFFF; font-size: 75px; } 对象,用一小时,分钟,秒来初始化:

Time

以下是相关部分的XUnit Design模式书的链接。有很多模式只是为了创建模拟:

http://xunitpatterns.com/Fixture%20Setup%20Patterns.html