14

当一个人开始搜索 PHP 单元测试时,通常会偶然发现:

  1. PHP 单元。
  2. 简单测试。
  3. 大量的博客解释了如何使用 PHPUnit 和 SimpleTest。
  4. StackOverflow 关于 PHPUnit 和 SimpleTest 的问题...

...我想你明白了。

我想知道:如何使用普通的 PHP 进行单元测试?这甚至是明智的努力吗?

我想我必须建立自己的小框架。我很感兴趣,因为我想更好地了解我的单元测试中发生了什么。我也很感兴趣,因为我认为轻量级、量身定制的解决方案可以更快地运行我的测试。

额外的问题:谁是失败者?是否有第三个框架值得研究(出于学术目的)?

4

4 回答 4

12

单元测试基本上是一组断言。

考虑以下 PHPUnit 测试用例:

class MyTest extends PHPUnit_Framework_TestCase {
   public function testFoo() {
       $obj = new My;
       $this->assertEquals('bar', $obj->foo());
   }
}

您可以在不使用 PHPUnit 的情况下进行类似的测试用例:

class MyTest {
   public function testFoo() {
       $obj = new My;
       assert("$obj->foo() == 'bar'");
   }
}

但是,如果在没有框架的情况下执行此操作,您将不得不手动创建测试用例的实例(MyTest)并手动调用每个测试方法(MyTest::testFoo 等)。

该框架(例如:PHPUnit)无非是一组“助手”,以使其更容易和更快:通过自动生成骨架;内置模拟对象、命令行脚本等。

您仍然可以在没有框架的情况下进行单元测试,但最终,使用框架可能会节省更多时间,因为毕竟这通常是框架的用途。

于 2011-01-12T15:23:28.270 回答
2

我的观点是标准轮子(很可能是PHPUnit)有什么问题需要开发替代品?毕竟,在这种情况下,经过验证的解决方案不是更明智的选择吗?

此外,如果您想进一步利用持续集成服务器,标准工具的输出将更易于使用。(您当然可以以相同的格式制作自己的工具输出,但这让我回到了“为什么要重新发明轮子”的论点。)

于 2011-01-12T15:17:40.520 回答
1

大约一年前我使用过 SimpleTest,它非常轻量级。除了为您提供一种自动加载测试包和断言的方法之外,它实际上并没有什么大不了的。

本质上,它包括所有以“test”开头的类,它会在该类中调用所有以“test”开头的方法。在方法内部,您可以断言结果是您所期望的。

如果您要构建自己的框架,我强烈建议您先研究一下 SimpleTest。与 PHP Unit 相比,它非常轻量级(如果这让你害怕的话)。

于 2011-01-12T15:18:00.423 回答
1

您可以在没有框架的情况下使用任何语言编写测试,但是您在测试中共享的代码最终将成为一种迷你框架。

一个好的单元测试框架将具有使测试更容易所需的通用内容,例如断言、模拟、存根、异常处理和代码覆盖率。

额外的问题:谁是失败者?是否有第三个框架值得研究(出于学术目的)?

在 PHP 单元测试领域有一些弱者,例如Enhance PHP,它是一个内置模拟和存根的单元测试框架。它比大玩家有一些优势 - 它有很好的文档并且上手速度非常快.

于 2011-08-29T16:48:42.563 回答