【问题标题】:Database/model fixtures and original state数据库/模型夹具和原始状态
【发布时间】:2011-01-27 19:01:08
【问题描述】:

我开始致力于改进我的测试实践,并且一直在阅读有关在 Yii 框架和 Rails 中使用 Fixtures 的信息。虽然我了解夹具的基本概念——它们在每次测试之前加载一组特定的数据——但我不清楚测试前数据库状态会发生什么。虽然这些测试显然不会在生产实例上运行,但开发模型中可能仍有一些数据,我不希望每次运行一些测试时都将其清除。你能帮我理清一些关于夹具和单元测试的背景知识吗?

【问题讨论】:

    标签: ruby-on-rails database unit-testing activerecord yii


    【解决方案1】:

    基本上,您从 CDbTestCase 派生的任何测试类都将尝试在其 setUp 函数中导入固定装置。

    值得注意的是,如果你没有在你自己的类中声明 $fixtures 变量,它将导入你拥有的整套固定装置(所以如果你有很多测试,最好只添加你需要什么)

    如果您的表需要预先提供特定数据并且您在测试期间没有更改它(例如在 Products 表中),那么您只需确保该表在数据库中并且您不需要t 为它创建一个夹具。 Yii不会碰桌子,可以按预期使用。

    【讨论】:

    • 那么 Yii 是否会自动制作表格的测试副本以加载夹具,或者我是否需要专门创建测试副本以便任何正在进行的 poke-test 数据在测试中持续存在?
    • 不,您需要创建一个包含原始数据库所有表的数据库的副本。然后修改 test.php 配置文件以指向用于测试的数据库。不要在没有完成之前使用夹具运行测试,否则您的常规表将被清除:)
    【解决方案2】:

    您的测试针对您的测试数据库运行,而您的开发工作针对您的开发环境(在数据库 yml 文件中设置)。测试环境在那里,因此您可以将其置于已知状态,而不会影响您在“戳测试”正在运行的应用程序时使用的任何数据。

    希望这有助于澄清一点。

    【讨论】:

    • 基本上:fixture 会清除数据库中的数据,因此请务必使用不同的 /config 文件运行测试,该文件指向一个没有重要数据的特殊测试数据库!
    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 2018-03-17
    • 1970-01-01
    • 2023-02-23
    • 2021-09-22
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多