пытаясь понять, ожидает / с с phpunit

От 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()) просто кажется ненужным.

1

Решение

Вам нужно $this->equals в ->with() аргументы, потому что вы можете указать различные утверждения для проверки аргументов. Вам не нужно иметь $this->with() для метода, который не подразумевает никаких аргументов или что вы не заботитесь о них.

https://phpunit.de/manual/current/en/appendixes.assertions.html#appendixes.assertions.assertThat.tables.constraints

Тот, который я буду использовать регулярно $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 раз, что может повлиять на производительность. , Если задать один раз, это гарантирует, что если кто-то изменит ваш код и он снова вызовет метод, тест не пройдёт

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]