3

我很想知道我们如何在纯 PHP 中使用单元测试来测试我们的代码。

这是他们的任何指导方针。

以及当我们使用 MVC 架构创建网站时如何进行单元测试。

4

5 回答 5

6

这个问题基本上只有一个答案:PHPUnit

它是 PHP 中最大的测试框架。最佳文档、最多用户、最多功能、行业标准。您正在寻找的一切。手册在这里

至于 MVC:编写可测试的代码与您正在编程的设计模式没有任何关系。

于 2012-09-17T11:38:07.193 回答
3

您可以在没有任何框架的情况下编写单元测试,但是您会发现您自己编写了很多可以从PHPUnitEnhancePHP免费获得的概念。

特别是,该框架将具有允许您断言测试的助手,为您提供在测试中使用的假冒的助手(如果您使用 MVC 模式,则在您的情况下特别有用)以及运行和显示结果的方法。

如果您查看单元测试框架的源代码,您会看到所有这些帮助程序是如何工作的,并且最终学习框架比编写框架要快。

这是一个手动测试的示例 - 如果结果不正确或出现异常,我们将无法通过测试:

$passed = true;
try {
    $result = $target->addTwoNumbers(5, 2);
    $passed = 7 === $result;
} catch (Exception $e) { 
    $passed = false;
}

return $passed;

当您使用框架时,这变得更具可读性:

$result = $target->addTwoNumbers(5, 2);
Assert::areIdentical(7, $result);

在这两个示例中,我都省略了设置测试的代码,即创建$target,因为它不会为比较添加任何意义。

于 2012-09-17T11:41:07.143 回答
2

还有 SimpleTest ( http://www.simpletest.org/ ) - 这是一个非常轻的。没有许多其他测试套件的包袱。

您还可以使用自动化工具,例如 Selenium,它本质上也模仿了用户坐着用鼠标浏览 - 显然您必须训练它并分配测试等。

于 2012-09-17T11:46:19.260 回答
1

当然,您可以使用 PHPUnit 或其他单元测试框架。我不喜欢在我的项目中添加大量额外代码的想法,所以我自己编写了一个单元测试器。

对于基本单元测试,您只需要 2 个 PHP 文件/类。一个执行实际测试,一个是单元测试的基类。

我写了一个带有代码的博客来演示如何做到这一点。可以在这里看到单元测试器的运行情况。

我的看法是,当 SO 出现这样的问题时,大多数答案是:不要自己使用 xxx。然而,这是有代价的:它会使你的代码膨胀,并使完成的项目变得更大、更难维护并且依赖于第三方代码。

于 2012-09-17T11:50:53.317 回答
1

试试这个教程

http://pear.php.net/manual/en/package.php.phpunit.intro.php

最好是使用 PHPUnit 进行单元测试。

于 2012-09-18T04:39:29.230 回答