createMock(Validator::class); $validator->expects($this->exactly(2)) ->method('validate') ->withConsecutive( [['foo' => 'bar'], ['foo' => 'required']], [[], ['foo' => 'required']] ) ->willReturnOnConsecutiveCalls( true, false ); $validator->expects($this->once()) ->method('getData') ->willReturn(['foo' => 'bar']); $implementation = new ValidatesRequestImplementation(); $implementation->setValidator($validator); $return = $implementation->validateData(new Request([], ['foo' => 'bar']), ['foo' => 'required']); $this->assertEquals(['foo' => 'bar'], $return); $this->expectException(ValidationException::class); $implementation->validateData(new Request([], []), ['foo' => 'required']); } }