PHP 嘲讽:如何对一种方法或另一种方法设置期望值?

PHP Mockery: how to set expectation on a method OR another method?

我正在尝试使用 Mockery and PHPUnit 来测试在执行某些代码时是否会调用给定 class 的一种方法或另一种方法。

这正是我想要做的(我正在使用 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 注释,但我找不到任何东西。

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

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

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

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