Обновление PHPUnit с 4.8 до 5.5


Мы обновили наши системы до PHP7.0. Это потребовало от нас обновления PHPUnit до 5.5, так как 4.8 не поддерживает PHP7 должным образом. Это приводит к следующей ошибке, которая приводит к сбою в phpunit в нашем CI

PHPUnit_Framework_TestCase::getMock() is deprecated,
use PHPUnit_Framework_TestCase::createMock() or
PHPUnit_Framework_TestCase::getMockBuilder() instead

Сейчас это выглядит так, что нам нужно коснуться более 1200 модульных тестов, чтобы переработать то, как мы строим наши насмешки.

Есть ли способ подавить это предупреждение или быстро преобразовать наше использование getMock в createMock, которое, похоже, работает достаточно по-другому, чтобы глобальный поиск/замена не сократит это?

Author: Umbrella, 2016-08-22

2 answers

Вы можете создать дополнительный тестовый класс под названием testadapter, который расширит PHPUnit_Framework_TestCase

class TestAdapter extends PHPUnit_Framework_TestCase
{
    /**
    * Override your deprecated method
    */
    public function getMock()
    {
        return $this->createMock();
    }
}

Тогда вам просто нужно расширить все ваши тесты из этого класса.

 5
Author: jaro1989, 2016-08-23 12:05:23

Для моих старых тестов работает следующее...

/**
 * Returns a mock object for the specified class.
 *
 * This method is a temporary solution to provide backward compatibility for tests that are still using the old
 * (4.8) getMock() method.
 * We should update the code and remove this method but for now this is good enough.
 *
 *
 * @param string     $originalClassName       Name of the class to mock.
 * @param array|null $methods                 When provided, only methods whose names are in the array
 *                                            are replaced with a configurable test double. The behavior
 *                                            of the other methods is not changed.
 *                                            Providing null means that no methods will be replaced.
 * @param array      $arguments               Parameters to pass to the original class' constructor.
 * @param string     $mockClassName           Class name for the generated test double class.
 * @param bool       $callOriginalConstructor Can be used to disable the call to the original class' constructor.
 * @param bool       $callOriginalClone       Can be used to disable the call to the original class' clone constructor.
 * @param bool       $callAutoload            Can be used to disable __autoload() during the generation of the test double class.
 * @param bool       $cloneArguments
 * @param bool       $callOriginalMethods
 * @param object     $proxyTarget
 *
 * @return \PHPUnit_Framework_MockObject_MockObject
 *
 * @throws \Exception
 */
public function getMock($originalClassName, $methods = array(), array $arguments = array(), $mockClassName = '', $callOriginalConstructor = true, $callOriginalClone = true, $callAutoload = true, $cloneArguments = false, $callOriginalMethods = false, $proxyTarget = null)
{
    $builder = $this->getMockBuilder($originalClassName);

    if (is_array($methods)) {
        $builder->setMethods($methods);
    }

    if (is_array($arguments)) {
        $builder->setConstructorArgs($arguments);
    }

    $callOriginalConstructor ? $builder->enableOriginalConstructor() : $builder->disableOriginalConstructor();
    $callOriginalClone ? $builder->enableOriginalClone() : $builder->disableOriginalClone();
    $callAutoload ? $builder->enableAutoload() : $builder->disableAutoload();
    $cloneArguments ? $builder->enableOriginalClone() : $builder->disableOriginalClone();
    $callOriginalMethods ? $builder->enableProxyingToOriginalMethods() : $builder->disableProxyingToOriginalMethods();

    if ($mockClassName) {
        $builder->setMockClassName($mockClassName);
    }

    if ($proxyTarget) {
        $builder->setProxyTarget($proxyTarget);
    }

    $mockObject = $builder->getMock();

    return $mockObject;
}
 2
Author: Daan Biesterbos, 2017-09-11 01:52:34