PHPUnit中使用shouldReceive的随机输入模拟方法

PHPUnit中使用shouldReceive的随机输入模拟方法,php,unit-testing,laravel-4,phpunit,mockery,Php,Unit Testing,Laravel 4,Phpunit,Mockery,我正在使用带有PHPUnit 3.7.38的Laravel 4。我有一个类,它使用随机生成的值作为输入。我使用str_random(100)。我想对它进行单元测试;但是,每次我尝试在方法上使用shouldReceive时,我都会收到一个错误,指出该值与预期值不匹配。这是有意义的,因为它在测试之前随机生成值。我不能重构原始代码,也不能抛出异常停止代码,因为在同一个函数中,在这段代码之后还有更多的东西要测试。我试过模仿stru随机函数;然而,这又带来了另一个错误。我真的不知道该怎么办,也不知道现在是

我正在使用带有PHPUnit 3.7.38的Laravel 4。我有一个类,它使用随机生成的值作为输入。我使用str_random(100)。我想对它进行单元测试;但是,每次我尝试在方法上使用shouldReceive时,我都会收到一个错误,指出该值与预期值不匹配。这是有意义的,因为它在测试之前随机生成值。我不能重构原始代码,也不能抛出异常停止代码,因为在同一个函数中,在这段代码之后还有更多的东西要测试。我试过模仿stru随机函数;然而,这又带来了另一个错误。我真的不知道该怎么办,也不知道现在是否有一个好的解决方案。我的代码如下所示:

class OriginalClass {

public function someFunction{

$randomCode = str_random(100);

    anotherFunction(array($name, $lastName, $randomCode), $anotherValue)

    }

}



class OriginalClassTest {



        $this->MockObject
            ->shouldReceive('anotherFunction')
            ->with(array('Jon', 'Smith', '11155488321'), '49')
            ->andReturn('Output');

        $this->assertEquals('Output', $this
            ->MockObject
            ->anotherFunction(array('Jon', 'Smith', '11155488321'), '49')); 
}
调用函数时,新生成的$randomCode已经创建,我得到了错误

"Mockery\Exception\NoMatchingExpectationException : No matching handler found for Mockery_1_MockObject::anotherFunction(array('Jon', 'Smith', 'newly generated randomCode'), '49')"

您没有测试
str\u random
函数。所以你的测试,用简单的英语应该是:

str_random
返回“ABCD”时,应使用“ABCD”作为
$randomCode
参数调用“anotherFunction”

换句话说,您需要在测试中控制随机字符串,并确保在调用其他函数时使用该值。您可以通过使用一个将提供随机字符串的类,并在类中模拟它,或者使用其他类似的技巧来实现这一点

如果您已尝试此操作,但出现错误,请发布错误,以便我们可以帮助您解决此问题