Пример (или несколько) о методе at() в phpunit

Кто-нибудь, пожалуйста, покажите мне пример для at Метод в тесте phpunit удваивается. Я не понимаю, какова его цель?

1 ответ

Решение

Цель at() Функция должна указывать порядок вызова методов на макете. Если бы вы были использовать once() или же exactly()тест проходит независимо от того, в каком порядке были вызваны методы, поскольку PHPUnit только проверяет, что они вызываются во время теста, а не когда.

Например:

class FooTest extends PHPUnitTestCase {
    public function testProperOrderOfMethods() {
         $mockObject = $this->getMockBuilder('BarObject')
             ->setMethods(['baz', 'boz'])
             ->getMock();

         $mockObject->expects($this->at(0))
             ->method('boz');

         $mockObject->expects($this->at(1))
             ->method('bar');

         $sut = new Foo();
         $sut->methodBeingTested($mockObject);
}

Это требует, чтобы наша функция была похожа на:

public function methodBeingTested($dependecy) {
    $dependency->boz();
    $dependency->bar();
}

И потерпит неудачу, если порядок функций будет изменен.

Примером использования может быть ваш класс, использующий объект, который подключается к службе и получает данные. Вы хотели бы открыть соединение, получить данные, а затем закрыть соединение. Или может потребоваться сделать дополнительные запросы в зависимости от ответа. В любом случае все эти действия должны выполняться в определенном порядке, поэтому в своем тесте вы должны использовать at(),

Другие вопросы по тегам