我的类名为Validator
,它的方法为forVote
。
这是我的代码。
public function test_should_set_default()
{
$this->mock = \Mockery::mock(Validator::class);
$this->mock->shouldReceive('forVote')
->andReturnTrue();
$this->app->instance(Validator::class,$this->mock);
$factory = new Factory();
$this->assertTrue($factory->setDefault());
}
因此Factory
调用Processor
,而Validator
则调用resample
。现在,我想运行模拟验证器。但是它调用了真正的方法。
我在做什么错了?
答案 0 :(得分:0)
https://laravel.com/docs/5.6/container#introduction
由于储存库被注入,我们能够容易地交换它 与另一个实现。我们还可以轻松地“模拟”,或者 在测试我们的广告时,创建
UserRepository
的虚拟实现 应用。
我的猜测是您可能正在像这样实例化依赖项:
$processor = new Processor()
和$validator = Validator::make(...);
因此,为了有可能要用到嘲笑类,则应该使用依赖注入这只是意味着你的类应通过__construct
方法注入你的依赖关系。
您Factory
类应该是这样的:
class Factory {
$processor;
public function __construct(Processor $processor)
{
$this->processor = $processor;
}
public function setDefault()
{
$this->processor->callingValidator();
}
}
和您的Processor
是这样的:
class Processor {
$validator;
/**
* The Validator will resolve to your mocked class.
*
*/
public function __construct(Validator $validator)
{
$this->validator = $validator;
}
public function callingValidator()
{
$this->validator->make();
}
}