У меня простой пример использования. Я хочу иметь метод setUp, который заставит мой mock-объект вернуть значение по умолчанию:
$this->myservice ->expects($this->any()) ->method('checkUniqueness') ->will($this->returnValue(true));
Но затем в некоторых тестах я хочу вернуть другое значение:
$this->myservice ->expects($this->exactly(1)) ->method('checkUniqueness') ->will($this->returnValue(false));
Я использовал GoogleMock для C ++ в прошлом, и у него было «returnByDefault» или что-то в этом роде. Я не мог понять, возможно ли это в PHPUnit (нет документации api, и код трудно прочитать, чтобы найти то, что я хочу).
Теперь я не могу просто изменить $this->myservice
на новый макет, потому что в настройке я $this->myservice
его другим вещам, которые нужно издеваться или тестировать.
Мое единственное другое решение заключается в том, что я теряю пользу установки и вместо этого собираю все свои макеты для каждого теста.
Вы можете переместить код setUp()
в другой метод, который имеет параметры. Затем этот метод setUp()
из setUp()
, и вы можете вызвать его также из своего тестового метода, но с параметрами, отличными от стандартных.
Продолжайте строить макет в setUp()
но задайте ожидание отдельно в каждом тесте:
class FooTest extends PHPUnit_Framework_TestCase { private $myservice; private $foo; public function setUp(){ $this->myService = $this->getMockBuilder('myservice')->getMock(); $this->foo = new Foo($this->myService); } public function testUniqueThing(){ $this->myservice ->expects($this->any()) ->method('checkUniqueness') ->will($this->returnValue(true)); $this->assertEqual('baz', $this->foo->calculateTheThing()); } public function testNonUniqueThing(){ $this->myservice ->expects($this->any()) ->method('checkUniqueness') ->will($this->returnValue(false)); $this->assertEqual('bar', $this->foo->calculateTheThing()); } }
Эти два ожидания не будут мешать друг другу, потому что PHPUnit создает экземпляр FooTest для запуска каждого теста.