首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >集成测试PHPUnit和Phinx

集成测试PHPUnit和Phinx
EN

Stack Overflow用户
提问于 2014-08-16 19:31:28
回答 2查看 1.4K关注 0票数 7

我正在创建一个PHPUnit,使用PHPUnit进行单元测试和集成测试。我希望集成用于DB迁移的phinx (而不是自己构建迁移代码)。

我其实有两个问题:

  • 我将如何使用Phinx来建立数据库?Phinx通常用作命令行工具,但我需要某种方式从我的单元测试类中的安装方法中调用。
  • 我将如何进行集成测试我编写的迁移类?我想要某种验证,在每次迁移步骤之后,我的数据库处于某种预期状态(可能包括一些在每次迁移过程中应该一致的样本数据)。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-09 01:08:56

这里有一个解决办法。

代码语言:javascript
复制
<?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");
}

?>

又短又甜。

票数 3
EN

Stack Overflow用户

发布于 2014-09-11 12:36:16

Phinx不会自动化所有的东西,但你可以这样做。

我将如何使用Phinx来建立数据库?Phinx通常用作命令行工具,但我需要某种方式从我的单元测试类中的安装方法中调用。

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

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

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

这样测试的问题是,每次迁移都是不同的,因此数据库的不同部分将被更改。测试通常针对代码/功能的一个非常特定的领域,因此您将无法有一个简单的测试来验证迁移进行得很好,所有需要更新的内容都被更新了,没有什么问题。如果要验证是否应用了确切的更改,则需要为每次迁移添加新的测试,并删除冗余测试。总的做法可能是这样:

  1. 使用公共索引(数字/数据)保存原始状态sql转储,以便找到最新的索引,如Migration-2014-09-11-22-00.sql
  2. 在引导导入中,找到最新的转储,用它设置数据库并应用迁移。
  3. 使用一个单独的迁移测试用例来断言它运行良好。实际上,您可以创建一个单独的Migration-2014-09-11-22-00.php,它将包含特定于迁移的断言,并将其包含在MigrationTest类的testMigration()中。毫无疑问,有更多的方法可以做到这一点。
  4. 其余的单元测试和集成测试验证了您的应用程序总体上按照预期工作。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25343227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档