1
我在TestCase中有大量的測試。我想設置一個模擬對象,在大多數測試中返回相同的值,但在一些測試中,我想定製該值。如何重置對PHPUnit模擬對象的期望
我的想法是創建set_up()
方法(我無法在自動調用的setUp()
中設置期望值),並在每次測試開始時手動調用它。在這種方法中,我將設置默認返回值,然後在幾個需要自定義返回值的測試中,我會再次調用期望值,並希望覆蓋默認返回值。這不起作用,返回值不會被覆蓋。
下面是一個簡單的例子:
<?php
class SomeClass {
function someMethod() {
}
}
class SomeTest extends PHPUnit_Framework_TestCase {
private $mock;
function set_up() {
$this->mock = $this->getMockBuilder('SomeClass')
->disableOriginalConstructor() // This is necessary in actual program
->getMock();
$this->mock->expects($this->any())
->method('someMethod')
->will($this->returnValue(1));
}
function test() {
$this->set_up();
$this->mock->expects($this->any())
->method('someMethod')
->will($this->returnValue(2));
$this->assertEquals(2, $this->mock->someMethod());
}
}
看來,這應該是可能從閱讀How to reset a Mock Object with PHPUnit。
PHPUnit mock with multiple expects() calls不回答我的問題。
我使用PHPUnit的4.2
謝謝,但我不想重複使用模擬,我只想覆蓋默認預期。我會在每個測試中調用'set_up()',以便測試之間不共享模擬。儘管將returnValue作爲參數傳遞是個好主意。 – bwroga 2014-09-19 15:57:23
對,我說的問題不會發生。我會編輯答案。 – gontrollez 2014-09-19 16:04:01