PHPUnit: проверить, что функция вызывается только один раз - PullRequest
1 голос
/ 04 апреля 2020

С помощью PHPUnit я хочу проверить, что функция вызывается только один раз в Mocked Class. Я проверил несколько случаев, чтобы убедиться, что excepts():

functionInMock не выполняется ( Хорошо, ожидаемый результат: нет ошибок ):

$myMock
    ->expects($this->never())
    ->method('functionInMock')
;

functionInMock выполняется 1 раз ( Хорошо, ожидаемый результат: без ошибок ):

$myMock
    ->expects($this->once())
    ->method('functionInMock')
;

functionInMock выполняется 2 раза ( Хорошо, ожидаемый результат: ошибка ):

$myMock
    ->expects($this->once())
    ->method('functionInMock')
;

functionInMock выполняется 1 раз:

$myMock
    ->expects($this->exactly(2))
    ->method('functionInMock')
;

or

$myMock
    ->expects($this->exactly(999))
    ->method('functionInMock')
;

Почему у меня нет ошибки в этом последнем случае? Тест проходит без сообщения об ошибке.

1 Ответ

0 голосов
/ 05 апреля 2020

Я не уверен, почему у вас неожиданное поведение, но этот пример работает нормально

<?php

// Lets name it 'SampleTest.php

declare(strict_types=1);

use PHPUnit\Framework\TestCase;

class SampleTest extends TestCase
{
    public function testSample(): void
    {
        $myMock = $this
            ->getMockBuilder(Sample::class)
            ->addMethods(['functionInMock'])
            ->getMock();
        $myMock
            ->expects($this->exactly(2))
            ->method('functionInMock');
        $myMock->functionInMock();
    }
}

class Sample
{
    public function function2InMock(): void
    {
    }
}

Выполнение

$ phpunit SampleTest.php 
PHPUnit 9.1.1 by Sebastian Bergmann and contributors.

F                                                                   1 / 1 (100%)

Time: 125 ms, Memory: 6.00 MB

There was 1 failure:

1) SampleTest::testSample
Expectation failed for method name is "functionInMock" when invoked 2 time(s).
Method was expected to be called 2 times, actually called 1 times.

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...