class Foo {
public $att;
public function __construct ($a) { $this->att = $a; }
}
class Some {
public function callMe (Foo $f) {}
}
// class I want to test
class SuT {
public function testMe (Some $s) {
echo $s->callMe(new Foo('hi'));
}
}
我要檢查是否Sut::testMe()
正確調用Some::callMe()
。由於該參數是一個(Foo
)對象(不是標量類型),我無法弄清楚如何調用PHPUnit的with()
來在其上運行斷言。例如,有一個assertAttributeEquals
方法,但是如何爲它提供調用的參數?
我想要做的是這樣的:
class SuTTest extends PHPUnit_Framework_TestCase {
public function testSuT() {
$stub = $this->getMock('Some');
$stub->expects($this->once())->method('callMe')
->with($this->assertAttributeEquals('hi', 'att', $this->argument(0));
/*
* Will $stub->callMe be called with a Foo object whose $att is 'hi'?
*/
$sut = new SuT();
$sut->testMe($stub);
}
}
感謝您的詳細解答!這兩個提議的斷言('instanceOf'和'equals($ object)')都可以正常工作,但我想要更多細粒度的斷言(例如檢查對象的屬性或斷言對象的函數返回值之一)! – JayVee 2011-05-13 07:14:29
@JayVee:檢查函數不是以PHPUnit/Framework/Assert.php(上面的鏈接)中的「assert」開頭。你可能要找的是:' - > attributeEqualTo($ attributeName,$ value)'對象的屬性,如果你真的想檢查傳入的對象在調用函數時返回正確的值(不確定如果你真的需要這樣的話,也許有更簡單的方法來構建你的測試?)你需要(afaik)創建你自己的PHPUnit_Framework_Constraint_ *類。 – edorian 2011-05-13 07:31:50
啊,這就是訣竅! '''attributeEqualTo''完全按照我預期(和需要)的方式工作。再次感謝! – JayVee 2011-05-23 09:28:29