setupで定義したMockメソッドの戻り値を変更しようとすると。。。
戻り値が変更されない!!
//...略
class ServiceTest extends TestCase
{
protected function setUp()
{
parent::setUp();
$this->mockTestService = \Mockery::mock(TestService::class);
$this->mockTestService->shouldReceive('validation')
->andReturn(true);
}
public function testValidation_trueが返却されること()
{
$this->assertTrue($this->mockTestService->validation()); // OK
}
/**
* @expectedException ValidationException
*/
public function testValidation_ValidationExceptionがスローされること()
{
$this->mockTestService->shouldReceive('validation')
->andThrow(ValidationException);
$this->mockTestService->validation(); //NG 例外が発生しない
}
}
どうすればあとから戻り値を定義しても動いてくれるか?
答えはちゃんと載っていました。
Mockery1.0 日本語訳
Github Mockery issue_401
//...略
class ServiceTest extends TestCase
{
protected function setUp()
{
parent::setUp();
$this->mockTestService = \Mockery::mock(TestService::class);
$this->mockTestService->shouldReceive('validation')
->byDefault() //☆☆ポイント
->andReturn(true);
}
public function testValidation_trueが返却されること()
{
$this->assertTrue($this->mockTestService->validation()); // OK
}
/**
* @expectedException ValidationException
*/
public function testValidation_ValidationExceptionがスローされること()
{
$this->mockTestService->shouldReceive('validation')
->andThrow(ValidationException);
$this->mockTestService->validation(); //OK
}
}
これであとからでも戻り値を置き換えられるようになりました!