我可以以某种方式为特定的shouldReceive更新shouldReturn值吗?
例如,我有几个测试使用一个返回值,只有一个使用其他返回值。
所以我把它放在setUp中:
$this->someDependency->shouldReceive('someMethod')->andReturn(0);
如果我把它放在特定的测试用例中:
$this->someDependency->shouldReceive('someMethod')->andReturn(1);
它将被忽略,并返回0。
我将这种移动模拟“修复”到所有测试并从setUp中删除。但我不喜欢那个代码重复。
答案 0 :(得分:2)
这主要是风格问题。您可以在测试调用的辅助函数中轻松创建一组“默认”模拟,然后使用更明确的替代版本来设置它们。
也可以在该帮助程序中,具有从特定模拟返回的给定值的函数参数。
有些人认为每个测试应该完全相互独立,除了一些非常常见的设置,并且应该在其自身内部完成所有事情。这确实使得它明确表示发生了什么(非常清楚,明显发生了什么) - 但代价重复的潜在代价。如果您不想重复太多,那么这是您的选择。