От https://phpunit.de/manual/current/en/test-doubles.html :
// Set up the expectation for the update() method
// to be called only once and with the string 'something'
// as its parameter.
$observer->expects($this->once())
->method('update')
->with($this->equalTo('something'));
Если ->with()
должен представлять параметры, которые передаются, чем почему $this->equalTo
необходимо? Какие еще методы можно использовать там и зачем? Кажется, что этот метод вызова фиктивного метода обновления излишне лаконичен, и его лучше записать как ->with('something')
,
И почему ты должен делать ->expects($this->once())
чтобы метод вызывался только один раз? Если вы вызываете метод / метод mock один раз, как вдруг он будет вызван несколько раз?
Если я сделаю strpos()
он не будет вызван 5 раз — он будет вызван один раз. поговорка ->expects($this->once())
просто кажется ненужным.
Вам нужно $this->equals
в ->with()
аргументы, потому что вы можете указать различные утверждения для проверки аргументов. Вам не нужно иметь $this->with()
для метода, который не подразумевает никаких аргументов или что вы не заботитесь о них.
Тот, который я буду использовать регулярно $this->isInstanceOf()
для проверки типа объекта, который передается в проверяемый метод.
Аналогично для $this->once()
Существует довольно много способов указать, сколько раз вызывается макет.
https://phpunit.de/manual/current/en/test-doubles.html#test-doubles.mock-objects.tables.matchers
Если вам все равно, сколько раз, просто используйте $this->any()
(хотя это пройдет, если метод не вызывается). Я склонен использовать $this->exactly()
а также $this->once()
так что я гарантирую, что метод вызывается столько раз, сколько я ожидаю. Для тестирования ошибок, $this->never()
особенно полезно в сочетании с тестом «счастливый путь». Так что я уточняю, какие шаги не должны происходить, когда что-то идет не так.
Необходимость указать, сколько раз вызывается метод, кажется немного излишним, но если вы пишете данные или выполняете ресурсоемкую операцию, вам нужно будет убедиться, что она выполняется один раз, а не в 5 раз, что может повлиять на производительность. , Если задать один раз, это гарантирует, что если кто-то изменит ваш код и он снова вызовет метод, тест не пройдёт
Других решений пока нет …