Пример (или несколько) о методе 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()
,