За последние 24 часа нас посетили 21070 программистов и 1267 роботов. Сейчас ищут 686 программистов ...

PHPunit замокать класс внутри тестируемого класса

Тема в разделе "Версионность, тестирование и развёртывание", создана пользователем JastaFly, 6 фев 2024.

Метки:
  1. JastaFly

    JastaFly Активный пользователь

    С нами с:
    4 ноя 2019
    Сообщения:
    46
    Симпатии:
    3
    Допустим нам нужно протестировать метод, внутри которого используется метод другого класса который влияет на результат:
    PHP:
    1. <?php
    2.  
    3. use From\Somewhere\ExternalHandler;
    4.  
    5. class MyClass
    6. {
    7.     public function testingMethod($arg)
    8.     {
    9.         $externalClass = new ExternalHandler();
    10.         $somethingData = $externalClass->doSomething($arg);
    11.         if($somethingData === 'something') {
    12.             return false;
    13.         }
    14.  
    15.         return $somethingData;
    16.     }
    17. }
    Можно ли в PHPunit замокать метод doSomething() класса ExternalHandler(), чтобы внутри тестируемого метода testingMethod(), чтобы он возвращал конкретное значение?
     
  2. Дюран

    Дюран Активный пользователь

    С нами с:
    9 мар 2018
    Сообщения:
    258
    Симпатии:
    20
    Да, можно

    PHP:
    1.         $finder = $this->createStub(MyClass::class);
    2.         $finder->method('run')->willReturn('wrong');
     
  3. JastaFly

    JastaFly Активный пользователь

    С нами с:
    4 ноя 2019
    Сообщения:
    46
    Симпатии:
    3
    И как этот код должен работать? Вы стабите класс, и подменяете в нём возвращаемое значение метода (которого кстати нет в описанном примере) из этого-же класса. Какое это имеет отношение к моему вопросу?
     
  4. Дюран

    Дюран Активный пользователь

    С нами с:
    9 мар 2018
    Сообщения:
    258
    Симпатии:
    20
    все понятно
     
  5. JastaFly

    JastaFly Активный пользователь

    С нами с:
    4 ноя 2019
    Сообщения:
    46
    Симпатии:
    3
    Так вся суть в том что ничего не понятно. Уж будьте так любезны снизойти и пояснить сирым как Ваш гениальный код должен выполнить задачу описанную в топике?! Или слабо?!! :D