我正在创建一个PHPUnit,使用PHPUnit进行单元测试和集成测试。我希望集成用于DB迁移的phinx (而不是自己构建迁移代码)。
我其实有两个问题:
发布于 2018-02-09 01:08:56
这里有一个解决办法。
<?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");
}
?>又短又甜。
发布于 2014-09-11 12:36:16
Phinx不会自动化所有的东西,但你可以这样做。
我将如何使用Phinx来建立数据库?Phinx通常用作命令行工具,但我需要某种方式从我的单元测试类中的安装方法中调用。
您可以使用exec PHP函数运行外部命令,请参阅文档。
我将如何进行集成测试我编写的迁移类?我想要某种类型的验证,即在每个迁移步骤之后,我的数据库处于某种预期状态(可能包括一些在每次迁移过程中应该一致的样本数据)。
这是更难的部分。最好的方法可能是在运行测试套件之前使用Phinx迁移数据库。如果您有良好的代码覆盖率,通过所有测试将自动验证迁移是否成功。毕竟,首先要确保的是应用程序从最终用户的角度来工作--功能/集成测试正好涵盖了这一点。
这样测试的问题是,每次迁移都是不同的,因此数据库的不同部分将被更改。测试通常针对代码/功能的一个非常特定的领域,因此您将无法有一个简单的测试来验证迁移进行得很好,所有需要更新的内容都被更新了,没有什么问题。如果要验证是否应用了确切的更改,则需要为每次迁移添加新的测试,并删除冗余测试。总的做法可能是这样:
Migration-2014-09-11-22-00.sql。Migration-2014-09-11-22-00.php,它将包含特定于迁移的断言,并将其包含在MigrationTest类的testMigration()中。毫无疑问,有更多的方法可以做到这一点。https://stackoverflow.com/questions/25343227
复制相似问题