【问题标题】:CakePHP testing - Import records on the flyCakePHP 测试 - 即时导入记录
【发布时间】:2013-12-07 13:59:47
【问题描述】:

我有很多使用固定装置的测试,这对于测试诸如“我是否从该方法返回正确数量的记录”之类的事情非常有用。

class CountryFixture extends CakeTestFixture {
    public $import = array(
        'model' => 'Country',
        'records' => false
    );

    public $records = array(
        array('id' => '1','name' => 'Sweden', 'region_id' => '1'),
        array('id' => '2','name' => 'Norway', 'region_id' => '1')
    }
}

现在我想测试数据本身。例如,我想确保没有国家因为某种原因失去了他们的地区。然后我制作了一个新的 Fixture 来导入所有记录。

class CountryLiveFixture extends CakeTestFixture {
    public $import = array(
        'model' => 'Country',
        'records' => true
    );
}

效果很好。但我似乎没有必要创建第二个夹具。有什么方法可以在测试中即时设置导入记录?

【问题讨论】:

    标签: cakephp testing fixtures


    【解决方案1】:

    “我是否从这个方法中获得了正确数量的记录”

    建议: 您应该测试业务逻辑,而不是框架已经测试过的内容。 如果您的查询是正确的,为什么您需要测试您是否确实得到了正确的计数? cake 已经为你做到了。

    【讨论】:

    • 嗯,是的,但我不是在测试框架,而是在测试数据。我的第一个示例的意思是,使用固定夹具的测试非常适合测试 getCustomersThatFullFillRequirement 之类的方法,您可以简单地看到记录数是正确的,而动态记录则无法做到这一点。问题是,我们有一个错误源于一些国家没有 region_id(在这个类比中)。所以我们想,为什么不写一个测试来查看数据,看看我们不会再次出现同样的错误。你看到我想要完成的事情了吗?
    • 如果你的函数只有查询,你不需要真正测试它。您应该更加注意您的查询吗?如果您将 WHERE region_id IS NOT NULL 添加到查询中,您将始终得到正确的结果,除了夹具数据更改。
    • 问题不在于它自己的测试。正如我所说,测试按原样进行。问题是我需要有两个固定装置。一种是静态数据,即我手动设置了几个帖子,另一种是动态数据,即我从数据库中导入所有记录。我的问题是,有什么方法可以让我只使用一个 Fixture 并将固定数据用于某些测试,并将导入的记录用于其他测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-14
    • 2013-09-17
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多