【问题标题】:Unit testing cakephp models单元测试 cakephp 模型
【发布时间】:2010-12-26 17:07:33
【问题描述】:

所以我在对 CakePHP 模型进行单元测试时遇到了麻烦。简单的事情,比如编写我的验证规则正在捕获错误的测试等。

首先,我有一个名为 NewsItem 的模型。它使用以下架构在我的 MySQL 数据库中定义

CREATE TABLE news_items (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(140) NOT NULL,
    body TEXT NOT NULL,
    modified DATETIME DEFAULT NULL,
    created DATETIME DEFAULT NULL
);

模型正在跟随

<?php
class NewsItem extends AppModel {

    var $name = 'NewsItem';
    var $validate = array(
        'title' => array(
            'titleRule-1' => array(
                'rule' => array('maxLength', 140),
                'message' => 'News item\'s title\'s length exceeds limit of 140 characters'
            ),
            'titleRule-2' => array(
                'rule' => 'alphaNumeric',
                'required' => true,
                'message' => 'Cannot save news item without a title'
            )
        )
    );

}
?>

在我的测试用例中,我有

// Validation lets All data good through
function testValidationAllowsNormalData()
{
    $this->assertTrue($this->NewsItem->save(array('NewsItem' => array('title' => 'A news item', 'body' => 'Some news'))));
}

但是我的测试用例失败了。有什么想法、建议、cmets?

【问题讨论】:

    标签: php unit-testing testing cakephp


    【解决方案1】:

    alphaNumeric 验证规则只允许使用字母数字字符,即无空格。所以你的测试正确地失败了。

    【讨论】:

      【解决方案2】:

      我对 cakePHP 不是很熟悉,但不会保存尝试持久化到数据库吗?如果是这样的话,那不应该在单元测试中......

      【讨论】:

      • Cake 足够聪明,可以使用单独的数据库进行测试。
      • 这很好,但这仍然不应该成为单元测试的一部分。单元测试,很好地测试单元。如果您将 db 连接添加到混合中,您将添加更多变量而不是隔离单元。
      • 所以你是说应该测试每个单元,而不是保存数据的单元?如果这正是你想要测试的呢?当然,它在混合中增加了一个变量,但那又如何呢?如果失败了,你还需要调试测试,如果成功了,你就知道单元和数据库都没有问题。
      • 来自我们自己的 SO stackoverflow.com/questions/61400/what-makes-a-good-unit-test 。 “测试一次应该只测试一件事。多个断言是可以的,只要它们都在测试一个特性/行为。当测试失败时,它应该查明问题的位置。”那篇文章有一些不错的读物,你应该看看。
      • 我同意一点。尽管如此,如果您想测试beforeValidate()、验证、beforeSave()save()afterSave() 以及该过程中涉及的任何其他内容,该怎么办?每个部分都可以单独工作,但你可能搞砸了它们如何一起玩的逻辑。换句话说:测试Model::save() 有什么错误,只要您仍然单独测试所有其他部分? (我确定 OP 会这样做,对吧,对吧?)
      猜你喜欢
      • 1970-01-01
      • 2012-02-27
      • 2015-11-17
      • 1970-01-01
      • 2019-06-21
      • 2015-06-24
      • 2017-12-19
      • 1970-01-01
      • 2014-08-28
      相关资源
      最近更新 更多