ДК
Мамыр 19, 2020, 2:26 Т.Қ.

unit test: Call to undefined method Mock

Привет. Впервые пишу юнит тест.

public function testCreateHisTestsByNomenclature($testSuite)
    {
        //мокирование сервиса для взаимодействия с API поставщика Invitro
        $invitroService = $this->getMockBuilder(Invitro::class)
            ->disableOriginalConstructor()
            ->getMock();
        $invitroService->expects($this->once())->method("getNomenclature")
            ->will($this->returnCallback(array($this, 'getNomenclatureStub')));

но при запуске получаю ошибку
Call to undefined method Mock_Postavshik_4be36ab3::getN omenclature()
Почему так то? я ведь заменил этот метод на getNomenclatureStub, который реализован в этом же тестовом классе.

public function getNomenclatureStub()
    {
        $content = file_get_contents(__DIR__ . "/files/getNomenclaturePostavshik.json");
        return json_decode($content);
    }
2

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

3
Evgenii Legotckoi
  • Мамыр 19, 2020, 2:32 Т.Қ.

Добрый день. Точно заменили?

public function testCreateHisTestsByNomenclature($testSuite)
    {
        //мокирование сервиса для взаимодействия с API поставщика Invitro
        $invitroService = $this->getMockBuilder(Invitro::class)
            ->disableOriginalConstructor()
            ->getMock();
        $invitroService->expects($this->once())->method("getNomenclature") // <<<<<<<<<<<<<<< Это что тогда?
            ->will($this->returnCallback(array($this, 'getNomenclatureStub')));
    ДК
    • Мамыр 19, 2020, 2:45 Т.Қ.

    мне вместо getNomenclature тогда указать getNomenclatureStub? Я думал, что тут так:
    этот метод ->method("getNomenclature") заменить на этот ->will(...)

    $invitroService->expects($this->once())->method("getNomenclatureStub")
                ->will($this->returnCallback(array($this, 'getNomenclatureStub')));
    
      Evgenii Legotckoi
      • Мамыр 19, 2020, 2:49 Т.Қ.
      • (өңделген)

      Ну я PHP не знаю, и собственно его несколько презираю. Но даже просто видя то, что здесь написано, могу ожидать следующее поведение программы.

      • $invitroService->expects() - ожидается вызов чего-то
      • $this->once() - однократный
      • ->method("getNomenclatureStub") - очевидно метода getNomenclatureStub
      • ->will($this->returnCallback(array($this, 'getNomenclatureStub'))); - видать в будущем, или отложенный или асинхронный.

      Так что я просто сделал вывод, что имена методов должны совпадать.

      Попробуйте

        Пікірлер

        Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
        Кіріңіз немесе Тіркеліңіз