Макет одного вызова функции в другом классе - PullRequest
1 голос
/ 21 февраля 2011

classA::getValue() вызывает метод в другом классе, classB::verifyValue(). Поскольку classB::verifyValue() имеет внешние зависимости, я хочу иметь возможность смоделировать его, чтобы просто вернуть true в моем модульном тесте.

Я не хочу касаться чего-либо еще в classB, только этот один метод.

Ответы [ 2 ]

2 голосов
/ 22 февраля 2011

Вы можете создать тестовую заглушку, как предлагает Spidy, или использовать встроенные в PHPUnit фиктивные объекты . Оба требуют, чтобы вы могли предоставить экземпляр classB для использования classA.

function testGetValue() {
    // set up mock classB
    $b = $this->getMock('classB', array('verifyValue'));
    $b->expects($this->once())
      ->method('verifyValue')
      ->will($this->returnValue(true));

    // set up classA
    $a = ...
    $a->setClassB($b);

    // test getValue()
    ... $a->getValue() ...
}
0 голосов
/ 21 февраля 2011

Используйте интерфейсы и MockClassB в вашем тесте.Например, интерфейс B имеет verifyValue ().Таким образом, classB реализует interfaceB и переопределяет verifyValue.Затем вы создаете другой класс с именем MockClassB, и он также реализует interfaceB.В вашем тестовом коде вместо создания classB создайте MockClassB (MockClassB будет возвращать true, а не полагаться на внешние зависимости).

Если это не имеет достаточного смысла, ищите "программирование интерфейса, а нереализация "

...