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

unit test: Call to undefined method Mock

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

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

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

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

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

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

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

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

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

    1. $invitroService->expects($this->once())->method("getNomenclatureStub")
    2. ->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'))); - видать в будущем, или отложенный или асинхронный.

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

      Попробуйте

        Пікірлер

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