我需要测试一些我使用PHP 5创建的函数,这些函数执行我的Web应用程序所需的数据库CRUD类型操作(SELECT,UPDATE,INSERT,DELETE)。PHP MySQL函数单元测试
我一直在寻找PHP单元测试套件,例如简单测试和PHP单元,它似乎提供了我所需要的,但是我不确定我是如何实现这一目的的,因为等价划分和边界分析并不是全部明确。我是否需要输入不同的变量并改变它?这似乎毫无意义,因为不同的字符串可能不一定有任何区别。
对此的任何指导将有所帮助,因为我以前没有遇到过这个问题。
我需要测试一些我使用PHP 5创建的函数,这些函数执行我的Web应用程序所需的数据库CRUD类型操作(SELECT,UPDATE,INSERT,DELETE)。PHP MySQL函数单元测试
我一直在寻找PHP单元测试套件,例如简单测试和PHP单元,它似乎提供了我所需要的,但是我不确定我是如何实现这一目的的,因为等价划分和边界分析并不是全部明确。我是否需要输入不同的变量并改变它?这似乎毫无意义,因为不同的字符串可能不一定有任何区别。
对此的任何指导将有所帮助,因为我以前没有遇到过这个问题。
如果您正在测试PHP代码和MySQL数据库之间的交互,那么您正在执行集成测试,而不是单元测试。
以下是使用Enhance PHP framework进行集成测试的一些示例,它测试保存并检索租户对象的存储库类。
它不是针对预先填充的数据库运行,而是运行在完全空的数据库上,并使用简单的表助手来创建和销毁表。这消除了对测试数据库中处于正确状态的特定数据的依赖性,这很难保持一步。
<?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);
}
}
?>
通常,单元测试的想法是确保如果您进行更改,您只需运行一系列简单的测试以确保现有功能不会中断。所以说,您需要涵盖您期望的典型数据,以及边缘/边界情况,这些情况可能包括带引号的字符串(以验证它们是否正确转义),SQL注入攻击(相同) ,空字符串,不同编码的字符串,NULL,布尔型true
等。每个测试都应验证给定输入的数据,您将获得预期的结果,在这种情况下(分别为):转义字符串插入,转义字符串插入,插入空字符串,转换或抛出不同编码后插入,插入NULL值,插入字符串'true'等。
我在几年内没有使用任何一种测试框架,但我记得PHPUnit有很好的结果。