PHP Mockery:如何设置方法或另一种方法的期望?

时间:2015-08-27 12:06:08

标签: php laravel-5 phpunit tdd mockery

我正在尝试使用MockeryPHPUnit来测试在执行某段代码时是否会调用某个方法或给定类的其他方法。

这正是我想要做的(我正在使用Laravel 5):

// Test an email is sent to new user
// upon account creation.
public function testEmailSentOnNewUserCreation()
{
    // Mail can be sent right on ...
    Mail::shouldReceive('send')->once(); //...OR...
    // ... it can be queued for later.
    Mail::shouldReceive('queue')->once();
    // I'm ignoring parameters and returning values here
    // for sake of brevity.

    $u = new User;
    $u->name = 'Jon Doe';
    $u->email = 'jon@doe.com';
    $u->save();
}

所以,我的问题是关于如何实现OR部分,如果可能的话。 我还搜索了一些可能有用的PHPUnit注释,但我找不到任何东西。

1 个答案:

答案 0 :(得分:1)

单元测试的范例之一是您应该控制您实现的每个测试用例的确切流程。这就是为什么在您的测试中不应出现ifswitch等的原因。

每当被测对象行为依赖于另一个对象或给定条件(逻辑上或多或少相同)时,必须模拟依赖关系以控制您正在测试的情况。

因此,在您的情况下,您应该模拟使您的类调用sendqueue方法的依赖项。

我认为这就是测试框架没有实现您打算使用的原因。