PHP MySQL 函数单元测试

Dan*_*est 5 php mysql phpunit unit-testing simpletest

我需要测试使用 PHP 5 创建的许多函数,这些函数执行我的 Web 应用程序所需的数据库 CRUD 类型操作(SELECT、UPDATE、INSERT、DELETE)。

我一直在研究 PHP 单元测试套件,例如 Simple Test 和 PHP Unit,它们似乎提供了我需要的东西,但是我不确定我打算如何实现这一点,因为等价分区和边界分析并不是那么清楚。我是否只需要输入不同的变量并改变它?这似乎毫无意义,因为不同的字符串不一定会有任何区别。

任何有关这方面的指导都会有所帮助,因为我以前从未遇到过这种情况。

Fen*_*ton 4

如果您正在测试 PHP 代码和 MySQL 数据库之间的交互,那么您正在执行集成测试,而不是单元测试。

以下是使用增强 PHP 框架进行集成测试的一些示例,它测试保存和检索租户对象的存储库类。

它不是针对预先填充的数据库运行,而是在完全空的数据库上运行,并使用简单的表助手创建和销毁表。这消除了对测试数据库中特定数据处于正确状态的依赖,而这很难保持同步。

<?php
class TenantRepositoryTestFixture extends EnhanceTestFixture {
    private $Target;

    public function SetUp() {
        $tables = new TableHelper();
        $tables->CreateTenantTable();
        $this->Target = Enhance::GetCodeCoverageWrapper('TenantRepository');
    }

    public function TearDown() {
        $tables = new TableHelper();
        $tables->DropTenantTable();
    }

    public function SaveWithNewTenantExpectSavedTest() {
        $tenant = new Tenant();
        $tenant->Name = 'test';

        $saved = $this->Target->Save($tenant);
        $result = $this->Target->GetById($saved->Id);

        Assert::AreNotIdentical(0, $result->Id);
        Assert::AreIdentical($tenant->Name, $result->Name);
    }

    public function SaveWithExistingTenantExpectSavedTest() {
        $tenant = new Tenant();
        $tenant->Name = 'test';
        $saved = $this->Target->Save($tenant);
        $saved->Name = 'changed';
        $saved = $this->Target->Save($saved);

        $result = $this->Target->GetById($saved->Id);

        Assert::AreIdentical($saved->Id, $result->Id);
        Assert::AreIdentical($saved->Name, $result->Name);
    }
}
?>
Run Code Online (Sandbox Code Playgroud)