Создание макетных классов обычно включает в себя настройку ожиданий вызова метода на парные/тестовые пары.Метод ожидания метода PHPUnit против утверждений
E.g. в «ванильный» PHPUnit мы можем незавершенная вызов метода и установить ожидания, как так:
$stub->expects($this->any())->method('doSomething')->willReturn('foo');
В макете рамках объекта Mockery, мы получим API, как это:
$mock->shouldReceive('doIt')->with(m::anyOf('this','that'))->andReturn($this->getSomething());
Ожидания, подобные этим, часто связаны на этапе настройки тестового набора, например setUp()
метод \PHPUnit_Framework_TestCase
.
Ожидания, подобные приведенным выше, нарушат тест, если они не будут выполнены. Следовательно, ожидание является реальным утверждением.
Это приводит к ситуации, когда у нас есть утверждения (утверждения + ожидания), разбросанные по классу тестового случая, так как мы получаем фактические утверждения на этапе настройки тестового примера, а также в отдельных тестах.
Было бы хорошей практикой, чтобы проверить ожидаемые вызовы метода в 'regular' assert..
. Это может выглядеть, что (насмешка):
public function setUp()
{
$mock = m::mock(SomeClass::class);
$mock->shouldReceive('setSomeValue');
$this->mock = $mock;
}
и затем в конце одного из методов испытаний:
public function testSoemthing()
{
...
$this->assertMethodCalled($this->mock, 'setSomeValue');
}
assertMethodCalled
в не методом выставленного PHPUnit. Это должно быть реализовано.
Короче говоря, следует ли рассматривать заявления о ожидании как фактические утверждения и, следовательно, проверять их в наших методах тестирования?
Благодарим за ценный совет. Я также обнаружил, что MockInterface Mockery также предоставляет метод 'shouldHaveBeenCalled()', поэтому его можно использовать аналогично тому, что вы показали с Prophecy. Также будет намного лучше проверить ожидаемые вызовы метода отдельно от других действий. В заключение я думаю, что можно с уверенностью утверждать, что 'shouldHaveBeenCalled()' является полноправным утверждением и требует собственного тестового примера. – luqo33