Php 更新mockry';安德烈图恩酒店

Php 更新mockry';安德烈图恩酒店,php,phpunit,mockery,Php,Phpunit,Mockery,我是否可以更新特定shouldReceive的shouldReturn值 例如,我有几个测试使用一个返回值,只有一个测试使用其他返回值 因此,我已将其放入设置中: $this->someDependency->shouldReceive('someMethod')->andReturn(0); 如果我把它放在特定的测试用例中: $this->someDependency->shouldReceive('someMethod')->andReturn(1);

我是否可以更新特定shouldReceive的shouldReturn值

例如,我有几个测试使用一个返回值,只有一个测试使用其他返回值

因此,我已将其放入设置中:

$this->someDependency->shouldReceive('someMethod')->andReturn(0);
如果我把它放在特定的测试用例中:

$this->someDependency->shouldReceive('someMethod')->andReturn(1);
它将被忽略,并返回0


我“修复”了将模拟移动到所有测试并从设置中删除的问题。但我不喜欢代码重复

这主要是风格问题。您可以轻松地在测试调用的助手函数中创建一组“默认”模拟,然后创建一个更显式的替代版本,对它们进行不同的设置

在该助手中,还可以为给定的值设置一个函数参数,以从特定的模拟返回


有些人认为,除了一些非常常见的设置之外,每个测试应该完全独立于其他测试,并且应该在自己内部完成所有事情。这确实明确了正在发生的事情(这非常清楚,也很明显正在发生的事情),但可能会导致代码重复。但是,如果您不想重复太多,这是您的选择。

哪一个是确定何时返回1而不是0的鉴别器?是否可能是方法参数数据?如果是,请检查
with()
方法实际上我在调用这个方法时没有参数。这个依赖关系是原则库,这个计数方法,这就是为什么我可以有多个值,而不管参数是什么。你是否尝试过使用
andReturn(value1,value2,…)
方法,正如可以在中找到的那样?我的单元测试实际上是相互依赖的。也许如果不是硬编码,返回值为“0”和“1”您可以为返回值设置一个全局变量,该变量在设置方法中设置一次,然后在测试用例中更新,该测试用例应具有不同的返回值?感谢Alister,您对独立测试的看法是正确的。但也许有一种方法可以更新shouldReceive,这就是为什么我没有将这个答案标记为已接受。