我想测试我的模型类之一,所以我必须从我的数据库中插入、更新和删除数据,以测试我的方法是否正常工作。
我正在使用一个已定义的测试数据库,其中我已经有一些数据。为了测试所有方法,我使用两个角色,一个是管理员,一个是用户。所以我使用 setUp 方法获取他们的数据,如下所示:
public function setUp() {
parent::setUp();
$this->User = ClassRegistry::init('User');
$admin = $this->User->query("select * from users where admin = 1");
$this->testUser['admin']['id'] = $admin[0]['users']['id'];
$this->testUser['admin']['username'] = $admin[0]['users']['username'];
$this->testUser['admin']['password'] = $admin[0]['users']['password'];
$this->testUser['admin']['verified'] = $admin[0]['users']['verified'];
$this->testUser['admin']['created'] = $admin[0]['users']['created'];
$this->testUser['admin']['nick'] = $admin[0]['users']['nick'];
$this->testUser['admin']['admin'] = $admin[0]['users']['admin'];
$user = $this->User->query("select * from users where admin = 0 and verified = 0");
$this->testUser['user']['id'] = $user[0]['users']['id'];
$this->testUser['user']['username'] = $user[0]['users']['username'];
$this->testUser['user']['password'] = $user[0]['users']['password'];
$this->testUser['user']['verified'] = $user[0]['users']['verified'];
$this->testUser['user']['created'] = $user[0]['users']['created'];
$this->testUser['user']['nick'] = $user[0]['users']['nick'];
$this->testUser['user']['admin'] = $user[0]['users']['admin'];
}
当我想测试像“banAccess”这样将数据从用户表移动到被禁止用户表的方法时,我遇到了一个问题,因为下次我为测试选择的用户将无法正常运行' t 在同一张桌子上。似乎 setUP() 和 tearDown() 方法只在调用所有测试方法后执行一次。这样,如果 bannAccess 测试方法在 testGetUserName 方法之前执行,例如,最后一个将失败,因为用户不在 Users 表上。
目前我正在测试该方法并在它之后删除用户以解决此问题,但我确信它必须是一种更好的方法:
public function testBanAccess() {
$result = $this->User->banAccess($this->testUser['user']['id'], 'spam', '42');
$expected = true;
$this->assertEquals($expected, $result);
$this->User->query("delete from banUsers where id = ".$this->testUser['user']['id']);
}
谢谢。