PHPUnit中应包含参数的变量列表


Expecting a variable list of arguments in PHPUnit

我有一个适配器,它有一个接受变量参数列表的方法,并将其转发给在我使用的框架中接受相同参数的方法。我想测试我的适配器是否正确地转发了参数。然而,我不想让我的测试知道框架支持哪种论点。

我有一个工作期望如下:

$context->expects( $this->once() )
    ->method( 'msg' )
    ->with(
        $this->equalTo( $someMessageArguments[0] ),
        $this->equalTo( $someMessageArguments[1] ),
        $this->equalTo( $someMessageArguments[2] )
    );

这显然是不好的,因为它假设变量列表的长度为3。我想使用一个数据提供程序,并测试不同的长度,在这种情况下,这段代码不会削减它

有没有一种合理的方法可以通过PHPUnit API做到这一点?我黑了这个,它也起作用,尽管看起来也很邪恶:

$invocationMocker = $context->expects( $this->once() )
    ->method( 'msg' );
$invocationMocker->getMatcher()->parametersMatcher
    = new PHPUnit_Framework_MockObject_Matcher_Parameters( $someMessageArguments );

如果没有办法通过PHPUnit API很好地做到这一点,有没有比这里列出的两种方法更好的方法?

我还没有找到用PHPUnit mock实现它的方法。

使用Mockery,你可以归档:

$mock->shouldReceive('msg')
     ->once()
     ->withArgs($someMessageArguments);

就我个人而言,我通常更喜欢模仿而不是PHPUnit模仿。

https://github.com/padraic/mockery

我需要对withConsecutive做一些类似的事情。

在为连续调用构建了一个参数数组之后,使用了以下内容。

$invocationMocker->getMatcher()->setParametersMatcher(new Matcher'ConsecutiveParameters($arguments));

PHPUnit接口和名称空间自最初的帖子以来发生了一些变化。