У меня простой пример использования. Я хочу иметь метод 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 для запуска каждого теста.