ห้องสมุด PHPUnit Mocking (ค่าเริ่มต้น) กำหนดว่าตรงกับความคาดหวังเพียงลำพังบนพื้นฐานการจับคู่ส่งผ่านไปยังexpects
พารามิเตอร์และข้อ จำกัด method
ที่ผ่านมา ด้วยเหตุนี้การexpect
เรียกสองครั้งที่แตกต่างกันเฉพาะในอาร์กิวเมนต์ที่ส่งผ่านไปwith
จะล้มเหลวเนื่องจากทั้งสองจะตรงกัน แต่จะมีเพียงการเรียกเดียวเท่านั้นที่จะตรวจสอบว่ามีลักษณะการทำงานที่คาดไว้ ดูกรณีการสร้างซ้ำหลังจากตัวอย่างการทำงานจริง
สำหรับคุณปัญหาที่คุณจำเป็นต้องใช้->at()
หรือตามที่ระบุใน->will($this->returnCallback(
another question on the subject
ตัวอย่าง:
<?php
class DB {
public function Query($sSql) {
return "";
}
}
class fooTest extends PHPUnit_Framework_TestCase {
public function testMock() {
$mock = $this->getMock('DB', array('Query'));
$mock
->expects($this->exactly(2))
->method('Query')
->with($this->logicalOr(
$this->equalTo('select * from roles'),
$this->equalTo('select * from users')
))
->will($this->returnCallback(array($this, 'myCallback')));
var_dump($mock->Query("select * from users"));
var_dump($mock->Query("select * from roles"));
}
public function myCallback($foo) {
return "Called back: $foo";
}
}
พันธุ์:
phpunit foo.php
PHPUnit 3.5.13 by Sebastian Bergmann.
string(32) "Called back: select * from users"
string(32) "Called back: select * from roles"
.
Time: 0 seconds, Memory: 4.25Mb
OK (1 test, 1 assertion)
สร้างซ้ำทำไมสอง -> ด้วย () เรียกว่าไม่ทำงาน:
<?php
class DB {
public function Query($sSql) {
return "";
}
}
class fooTest extends PHPUnit_Framework_TestCase {
public function testMock() {
$mock = $this->getMock('DB', array('Query'));
$mock
->expects($this->once())
->method('Query')
->with($this->equalTo('select * from users'))
->will($this->returnValue(array('fred', 'wilma', 'barney')));
$mock
->expects($this->once())
->method('Query')
->with($this->equalTo('select * from roles'))
->will($this->returnValue(array('admin', 'user')));
var_dump($mock->Query("select * from users"));
var_dump($mock->Query("select * from roles"));
}
}
ผลลัพธ์ใน
phpunit foo.php
PHPUnit 3.5.13 by Sebastian Bergmann.
F
Time: 0 seconds, Memory: 4.25Mb
There was 1 failure:
1) fooTest::testMock
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-select * from roles
+select * from users
/home/.../foo.php:27
FAILURES!
Tests: 1, Assertions: 0, Failures: 1