【问题标题】:Integration testing PHPUnit and Phinx集成测试 PHPUnit 和 Phinx
【发布时间】:2014-10-10 04:21:06
【问题描述】:

我正在创建一个 PHP REST api,使用 PHPUnit 进行单元测试和集成测试。我希望为数据库迁移集成 phinx(而不是自己构建迁移代码)。

其实我有两个问题:

  • 如何使用 Phinx 进行数据库设置? Phinx 通常用作命令行工具,但我需要一些方法从单元测试类的 setup 方法中调用。

  • 如何对我编写的迁移类进行集成测试?我想要某种形式的验证,即在每个迁移步骤之后,我的数据库处于某种预期状态(可能包括一些在每次迁移期间应该保持一致的示例数据)

【问题讨论】:

    标签: php phpunit database-migration


    【解决方案1】:

    这里有一个解决方案。

    <?php
    use Phinx\Console\PhinxApplication;
    use Symfony\Component\Console\Input\StringInput;
    use Symfony\Component\Console\Output\NullOutput;
    use Phinx\Wrapper\TextWrapper;
    
    class ExampleTest extends TestCase
    {
    
    private static $T;
    
    public function setUp(){
        $app = new PhinxApplication();
        $app->setAutoExit(false);
        $app->run(new StringInput(' '), new NullOutput());
    
        self::$T = new TextWrapper($app);
        self::$T->getMigrate("testing");
    }
    
    public function tearDown(){
        self::$T->getRollback("testing");
    }
    
    ?>
    

    又短又甜。

    【讨论】:

    • TextWrapper 未在此处声明......并且一些额外的解释也可能有所帮助
    【解决方案2】:

    Phinx 不会自动执行所有操作,但您可以这样做。

    我将如何使用 Phinx 进行数据库设置?芬克斯是 通常用作命令行工具,但我需要一些方法 从我的单元测试类中的 setup 方法调用。

    您可以使用exec PHP 函数来运行外部命令,请参阅documentation

    我将如何对我使用的迁移类进行集成测试 写?我想要某种验证,每次之后 迁移步骤我的数据库处于某种预期状态(也许 包括一些在每个过程中应该保持一致的样本数据 迁移)。

    这是更难的部分。最好的方法可能是在运行测试套件之前使用 Phinx 迁移数据库。假设您具有良好的代码覆盖率,通过所有测试将自动验证迁移是否成功。毕竟,您要确保的第一件事是应用程序从最终用户的角度工作——您的功能/集成测试完全涵盖了这一点。

    像这样测试的问题是每次迁移都是不同的,因此数据库的不同部分会发生变化。测试通常针对代码/功能的一个非常特定的区域,因此您将无法进行简单的单一测试来验证迁移是否顺利,所有需要更新的内容都已更新,并且没有出错。如果您想验证是否应用了确切的更改,您需要为每次迁移添加新测试并删除冗余测试。整体做法可能是这样的:

    1. 使用通用索引(数字/数据)保存原始状态 sql 转储,以便您可以找到最新的,例如 Migration-2014-09-11-22-00.sql
    2. 在引导导入中找到最新的转储,使用它设置数据库并应用迁移。
    3. 使用单独的迁移测试用例来断言它运行良好。您实际上可以创建一个单独的Migration-2014-09-11-22-00.php,其中将包含特定于迁移的断言并将其包含在MigrationTest 类的testMigration() 中。肯定有不止一种方法可以做到这一点。
    4. 其余的单元测试和集成测试验证您的应用总体上是否按预期工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-16
      • 2010-10-19
      • 2018-11-14
      • 1970-01-01
      • 1970-01-01
      • 2012-01-13
      • 1970-01-01
      相关资源
      最近更新 更多