gpt4 book ai didi

unit-testing - 测试驱动开发 - 单元测试(在 CakePHP 中)

转载 作者:行者123 更新时间:2023-11-28 19:50:55 24 4
gpt4 key购买 nike

我在 CakePHP 中进行单元测试时遇到了一些问题,尤其是在测试数据库插入/更新时。假设我有一个类似这样的模型:

class User {
var $name = 'User';

function updatePassword($data) {
return $this->updateAll($data);
}
}

class UserTestCase {
function testUpdatePassword() {
$tmpData = array(
'User' => array(
'password' => sha1(uniqid('', true)) //dummy pass
);

$result = $this->User->updatePassword($tmpData);

$this->assertTrue($result);
}
}

我遇到的问题是在我的测试用例中:

  • 我必须提供通常会从表单中检索到的虚拟数据
  • 虚拟数据的格式没有考虑到实际表单数据可能不正确的事实
  • 我只是在测试更新是否成功:创建所有虚拟数据来测试这个似乎需要付出很多努力

这个例子可能看起来有点做作(例如,我可以在 Controller 中执行 update 而无需创建额外的模型方法)但要点是,在测试更新/插入时,数据是虚拟数据,从表单中检索到的数据可能会有所不同,而且 yield 似乎不会超过成本。

我们很欣赏您的 TDD 和单元测试方法,如果能知道您通常尝试对案例提供什么样的覆盖范围,那就太好了。

干杯

最佳答案

有人曾经说过,单元测试应该讲故事。这种方法可以帮助您编写对您正在编码的应用程序有意义的测试。为每个测试方法写下描述性名称,例如:

function testUpdatingInsecurePasswordShouldFail() {
$data = array('User' => array(
'password' => 'password'
));
$result = $this->User->updatePassword($data);
$this->assertFalse($result);

$data = array('User' => array(
'password' => ''
));
$result = $this->User->updatePassword($data);
$this->assertFalse($result);
}

讲述了不安全密码的“故事”后,您就可以编写模型代码,以便新测试通过。另一个例子:

function testUpdatingStrongPasswordShouldSucceed() {
$data = array('User' => array(
// forget about hashing for the moment
'password' => 'battery hoarse collect maple'
));
$this->User->updatePassword($data);
$result = $this->User->find('count', array(
'conditions' => array(
// making some assumptions about the test data here
'User.username' => 'test_user1',
'User.password' => 'battery hoarse collect maple',
),
);
$this->assertEqual($result, 1);
}

请注意,我们正在做更多的工作来验证更新是否正常工作。当测试框架开始发现错误和回归时,您会很高兴您付出了额外的努力。

好的描述性测试名称的一个好处是,现在我们可以使用 cake test --testdox 选项以易于理解的英语输出结果:

[x] Updating insecure password should fail
[x] Updating strong password should succeed

关于unit-testing - 测试驱动开发 - 单元测试(在 CakePHP 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5544894/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com