phpunit,在yii1中使用其他fixture

Posted

技术标签:

【中文标题】phpunit,在yii1中使用其他fixture【英文标题】:phpunit, use other fixture in yii1 【发布时间】:2016-06-10 07:13:31 【问题描述】:

我在手册中找到了如何使用固定装置的示例

class CommentTest extends CDbTestCase

    public $fixtures=array(
        'posts'=>'Post',
        'comments'=>'Comment',
    );

    …

或者我可以像这样使用'post' => ':post'。 但我想在其他测试中使用其他夹具,例如:当我测试模型 Post 时我使用“post.php”夹具,当我测试模型作者时我想使用 post_for_author.php(数据必须插入表 post 中)

我试着这样写:

class CommentTest extends CDbTestCase

    public $fixtures=array(
        'posts_for_author'=>'Post',
        'comments'=>'Comment',
    );

    …

和其他方式 'posts_for_author'=>':post', 但它不起作用。请帮帮我,怎么办?

【问题讨论】:

【参考方案1】:

像这样使用独立的固定装置。

应用程序/测试/单元:

    class CommentTest extends IsolatedFixtureDbTestCase 
        public $fixtures=array(
            'posts_for_author'=>'Post',
            'comments'=>'Comment',
        );
        ...
    

应用程序/测试:

abstract class IsolatedFixtureDbTestCase extends CDbTestCase

    private $basePathOld = null;

    public function setUp()
    
        $fixturePath = Yii::getPathOfAlias('application.tests.fixtures.' . get_class($this));
        if (is_dir($fixturePath)) 
            $this->basePathOld = $this->getFixtureManager()->basePath;
            $this->getFixtureManager()->basePath = $fixturePath;
        
        parent::setUp();
    

    public function tearDown()
    
        parent::tearDown();
        if (null !== $this->basePathOld) 
            $this->getFixtureManager()->basePath = $this->basePathOld;
        
    

然后在 application/tests/fixtures 中,您可以创建文件夹 CommentTest 并在其中创建此类的fixture

【讨论】:

以上是关于phpunit,在yii1中使用其他fixture的主要内容,如果未能解决你的问题,请参考以下文章

如果重写setUp和tearDown,则不会调用PHP,phpunit和dbunit - getConnection和getDataSet

Yii2与Yii1的模块中Layout使用区别

使用 Webgrind 或其他 PHP 分析工具分析 PHPUnit 测试的方法?

如果其他模块需要,根 composer 文件中是不是需要 phpunit?

pytest学习和使用9-fixture中conftest.py如何使用?

使用 Docker 在 PhpStorm 中使用 PHPUnit