我正在尝试在cakePHP中编写我的第一个单元测试。 我想通过以下操作尝试一下:
public function joinLobby($userId = null, $lobbyId = null) {
// json webservice layout
$this->layout = 'ajax';
if (!$userId || !$lobbyId) {
throw new CakeException(__('Paramter(s) missing'));
}
if (!$this->Lobby->exists($lobbyId)) {
throw new CakeException(__('Invalid lobby supplied'));
}
if (!$this->User->exists($userId)) {
throw new CakeException(__('Invalid user supplied'));
}
$this->__addUsersToLobby(array($userId), $lobbyId);
}
到目前为止我的测试用例是这样的:
public function testShouldNotAddNonExistentUserToLobby() {
$this->LobbiesController = $this->generate('Lobbies', array(
'methods' => array(
'joinLobby',
'__addUsersToLobby'
),
'models' => array(
'Lobby',
'User'
)
));
$this->LobbiesController->Lobby->expects($this->any())->method('exists')->will($this->returnValue(true));
$this->LobbiesController->User->expects($this->once())->method('exists')->will($this->returnValue(false));
$this->LobbiesController->expects($this->never())->method('__addUsersToLobby');
$this->testAction('Lobbies/joinLobby/1/1');
}
当我进行测试时,我得到了这个:
UsersLobbiesControllerTest :: testShouldNotAddNonExistentUserToLobby 方法名称的期望失败等于1次调用时。 预计方法被调用1次,实际上被称为0次。
我能让测试通过的唯一方法是将“$ this-> once()”更改为“$ this-> any()”或“$ this-> never()”。
任何帮助? 提前谢谢!
答案 0 :(得分:0)
我终于成功了。 问题是我在嘲笑我正在测试的同一个函数,所以它实际上并没有被调用。因此,未执行调用其他函数的代码。 从'methods'数组中删除'joinLobby'就可以了。
干杯