SimpleTest 与 PHPunit

Posted

技术标签:

【中文标题】SimpleTest 与 PHPunit【英文标题】:SimpleTest vs PHPunit 【发布时间】:2010-09-07 06:03:19 【问题描述】:

我想知道是否有任何在这两个方面都有经验的人可以阐明两者之间的显着差异(如果有的话)?

每种方法的任何特定优势使其适用于任何特定情况?

【问题讨论】:

我会选择 phpUnit 更好 ... 为什么?尝试解释你的答案,提供资源/链接/examples.o 为什么不两者兼而有之? 【参考方案1】:

我发现 SimpleTest 比 PHPUnit 更容易设置。只需提取它,你就可以开始了。这样做的好处是,如果您在多台机器上工作,因为您可以以与源代码相同的方式存储整个测试框架,从而知道您使用的是相同的框架代码。特别是如果您以任何方式对其进行修改。

所以,我会说 SimpleTest 的优势在于它非常轻巧且便于携带。

SimpleTest 还附带了一个非常简单的 html GUI,如果您愿意,它很容易扩展。据我所知,PHPUnit 不包含 HTML GUI,但有 GUI 可供下载,例如 Cool。

【讨论】:

啊,伙计,我完全是无意中否决了这一点,直到第二天才意识到。现在我的投票被锁定了......对不起。【参考方案2】:

好久没查过Simple Test了,上次有个eclipse插件,对我来说是个主要因素,不过好久没更新了。 Sebastian Bergmann 仍然非常积极地致力于 PHPUnit,但它仍然缺乏一个好的 eclipse 插件 - 但它包含在新的 Zend Studio 中。

【讨论】:

【参考方案3】:

我现在更喜欢 PHPUnit,但刚开始时我使用的是 SimpleTest,因为我并不总是可以访问命令行。 SimpleTest 很不错,但在我看来,它与 PHPUnit 相比唯一真正拥有的就是网络运行器。

我喜欢 PHPUnit 的原因是它集成了其他 PHP 开发工具,例如 phing(SimpleTest 也是如此)、phpUnderControl 和 Xinc。从 3.0 版开始,它支持has mocking,正在积极开发中,文档非常好。

真正为自己回答这个问题的唯一方法是尝试两种方法,看看哪种更适合你的风格。

编辑:Phing 现在也与 SimpleTest 集成。

【讨论】:

请注意,phing 的网站说它支持 SimpleTest【参考方案4】:

Baphled 在SimpleTest vs PHPUnit3 上有一篇不错的文章。

【讨论】:

【参考方案5】:

我制作了一个基于 phpUnit Web 的 UI 测试用例运行器,并在 sourceforge 上提供了它。使用 ajax 并且有非常酷的界面,如果你想试一试,请在 sourceforge 上查看。项目名称为phpunitwebui,网址为http://phpunitwebui.sourceforge.net/

【讨论】:

【参考方案6】: 我不明白如何下载和安装 PHPUnit。

不过,我可以很容易地理解如何安装 SimpleTest。

(据我所知,PHPUnit 的说明大致是“通过 PEAR 安装它,我们不会给出任何其他方式的说明”) 见:

http://www.phpunit.de/manual/current/en/installation.html

对于 SimpleTest,只需下载它并从您的代码中指向它。

所以 Simpletest 为我赢得了胜利。

【讨论】:

我想自从您发布答案以来文档已经更改。今天,你只需输入 3 个命令,它就会被安装,你甚至不必自己下载任何东西。 您可以通过 PEAR 安装 PHPUnit,手动下载或从 github 拉取最新代码。主页上有安装说明的明确链接。 SimpleTest 只给了我一个选择,指向 sourceforge,它有无数的广告...... 在 Windows 下,PHPUnit 安装起来很痛苦。我必须将它安装在 2 个工作站上。第一个花了 3 个小时,在 PEAR IRC chanel 的帮助下。对于第二个(相同的操作系统),我从未成功过。也就是说,在 Linux 上它是一种魅力。 SimpleTest +1 易于安装 易于使用。 PHPUnit 比简单测试更强大,足以满足我的需求。 自 09 年以来情况可能发生了变化,但 PHPUnit 在几秒钟内安装完毕,在 Windows 上只需几个命令。【参考方案7】:

正如已经指出的那样,它主要是一种偏好选择,因为两者都会运行您为其编写的测试并报告结果。

Simpletest Web UI 非常有用,但有时也很麻烦。在我当前的项目中,我不得不在系统中投入更多的工作,以使我的应用程序(API)与 Web 界面(正确设置 apache,将文件复制到 public_html 根等)一起工作,而不是本来应该做的只需从 Eclipse 工作区运行 phpunit。因此我选择 PHPUnit。此外,使用 PEAR 是一大优势,因为您不需要手动跟踪更新。只需偶尔运行一次pear upgrade,PHPUnit 就会保持最新。

【讨论】:

我没有得到这个分析。你是说你通过 eclipse 插件为 phpunit 测试浏览器类型的功能,而不是本地的 apache 设置? 不,我是说在我的项目中,由于没有浏览器类型的功能,我通过eclipse使用phpunit。【参考方案8】:

这个问题已经过时了,但由于它仍然有流量和答案,尽管我在这里再次陈述了我的观点,但我已经在其他一些(较新的)问题上做了。

真的很对 SimpleTest 仍然被认为是 phpunit 的替代品感到困惑。也许我只是被误导了,但据我所知:

PHPUnit 是标准;大多数框架都使用它(例如 Zend Framework (1&2)、Cake、Agavi,甚至 Symfony 也在 Symfony 2 中为 phpunit 放弃了自己的框架)。 PHPUnit 集成在每个 PHP IDE(Eclipse、Netbeans、Zend Stuide、PHPStorm)中并且运行良好。 Simpletest 有一个针对 PHP 5.1(又名旧)的 Eclipse 扩展,仅此而已。 PHPUnit 可与每个持续集成服务器完美配合,因为它会输出所有标准日志文件以获取代码覆盖率和测试报告。 Simpletest 没有。虽然这不是一个大问题,但一旦您停止“只是测试”并开始开发软件,它就会给您带来很大的麻烦(是的,这种说法具有挑衅性:)不要太认真)。 PHPUnit 得到积极维护、稳定,适用于每个代码库、每个场景以及您希望编写测试的每种方式。 (主观)PHPUnit provides much nicer 代码覆盖率报告than Simpletest 使用 PHPUnit,您还可以在 IDE 中获取这些报告(Netbeans,Eclipse,...) 还有一些关于web interface to phpunit tests 的建议。

我还没有看到任何支持 SimpleTest 的论据。由于 PHPUnit 可以通过 pear 获得,因此安装起来并不简单:

pear channel-discover pear.phpunit.de
pear install phpunit/PHPUnit

和“第一次测试”看起来几乎一样。

PHPUnit 3.7 开始,只需使用PHAR Archive,它安装更容易

wget http://pear.phpunit.de/get/phpunit.phar
chmod +x phpunit-3.7.6.phar

或者对于 Windows,只需 downloading phar 并运行:

php phpunit-.phar

或者当使用supported composer install这样的方式时

"require-dev": 
    "phpunit/phpunit": "3.7.*"

到您的 composer.json。


对于您想要测试的所有内容,PHPUnit 都会有一个解决方案,并且您几乎可以在任何地方找到帮助(所以,freenode 上的#phpunit irc 频道,几乎每个 php 开发人员 ;))

如果我说错了或忘记了什么,请纠正我:)

PHP 测试工具概述

视频:http://conference.phpnw.org.uk/phpnw11/schedule/sebastian-bergmann/

幻灯片:http://www.slideshare.net/sebastian_bergmann/the-php-testers-toolbox-osi-days-2011

它提到了像 Atoum 这样的东西,它自称:“一个简单、现代和直观的 PHP 单元测试框架!”


全面披露

我最初在 2011 年 1 月写了这个答案,当时我与任何 PHP 测试项目没有任何关系。从那时起,我成为了 PHPUnit 的贡献者。

【讨论】:

我发现 simpletest 的 web-testing 比 phpunit 的 web-testing 更容易设置和运行。由于这几乎是 php 的必需品,因此这对于中小型项目来说是一个胜利,您只想立即投入测试框架,重要的是简单级别的测试。例如,排除 web 测试,我倾向于只在 simpletest 中使用 assertTrue() 方法。当然,Web 测试会变得更复杂,但不必过于复杂。 "> 因为这对于 php 来说几乎是必需品”——我强烈反对这一点。我还没有看到通过浏览器运行测试的任何 php 项目(或框架)。它创造了很多问题而没有真正的好处。使用 ftp 同步在共享主机系统上开发 php 代码的时代已经一去不复返了(手指交叉),不,即使是很小的项目也需要一个正在运行的 Web 服务器(最多只有一个 php 发布的盒子)。 UNIT 通过浏览器而不是 cli 或 IDE 进行测试是一个非常罕见的用例,我认为这根本不重要。 考虑 SimpleTest 而不是 PHPUnit 的一个强有力的理由是后者是一个命令行工具,必须安装在运行测试的服务器上,这有时比 includeing 困难得多SimpleTest .PHP 文件(正如其他人所解释的那样。) 对于构建自己的测试环境的专业程序员来说,PHPUnit 听起来很难被击败,但如果将测试系统集成到基于 PHP 的开源应用程序中 应用程序的“开发人员”可能充其量是(我称之为)“职业程序员”,那么 SimpleTest 的简单性对我来说具有真正的吸引力。 FWIW。 @MikeSchinkel 我完全同意。我们使用 SimpleTest 作为定制应用程序框架的基于浏览器的集成测试解决方案。它始终可用,并且除了 svn pull 之外不需要安装配置,因为它包含在框架的源代码中。我们迁移到 PHPUnit 以进行 CIS 集成。因为我们是一家 Windows 商店,所以 PHPUnit 的安装和配置可能是一场噩梦,我们的许多初级开发人员只是破坏了环境或失去了测试的意愿。 幻灯片的链接已损坏。【参考方案9】:

这个问题很老,但我想补充一下我的经验:PHPUnit 现在似乎是标准,但是如果您使用使用大量全局变量的遗留系统,您可能会从一开始就陷入困境。在 PHPUnit 中似乎没有用全局变量进行测试的好方法,你似乎必须通过 $GLOBALS 设置你的变量,如果你有大量的文件在各处设置全局变量,那就不好了。好吧,有些人可能会说问题出在遗留系统上,但这并不意味着我们不能在这样的系统上进行测试。使用 SimpleTest 这样的事情很简单。我想如果 PHPUnit 允许我们在全局范围内包含一个文件,而不是在任何类/函数范围内,那么它也不会是太大的问题。

另一个有希望的解决方案是http://www.enhance-php.com,看起来不错:)

【讨论】:

我一直只是在配置 XML 中使用 <phpunit backupGlobals="false">,并且在测试中从来没有遇到过全局变量问题... @mr1031011 您的链接没有用处。也许你的意思是?:github.com/Enhance-PHP/Enhance-PHP @Potherca 告诉我 - 我最初在遗留代码项目中遇到了很多全局问题,我想我尝试了所有注释 @backupGlobals @backupStaticAttributes @runInSeparateProcess @preserveGlobalState, global $xxx及其所有组合,然后尝试 --no-globals-backup 并突然看到所有工作都按预期工作。 :D【参考方案10】:

接受的答案中提到的一半根本不正确:

SimpleTest有

设置更简单(解压到文件夹,包含并运行) 只需将文件夹检查到版本控制中(现在尝试使用 phpunit 进行此操作:)) 更少的依赖和大量的扩展(webtester、formtester、auth) 一个很好的代码覆盖率报告器,易于扩展(点、函数名、颜色) 代码覆盖率总结(最终登陆 PHPUnit 4.x) 一个不错的网络运行程序和一个 ajax 网络运行程序,具有组和单个文件执行 还是更好的 diff 工具(没有空格或换行问题) 通过 phpUnit 运行 SimpleTests 的适配器/包装器,反之亦然 兼容性 PHP5.4+

缺点:

非行业标准 (PHPUnit) 没有积极维护

【讨论】:

对我和我老板php4服务器还是有用的^^" 谢谢。我已经升级了 SimpleTest 的代码库以使用较新的 PHP 版本,并且在这一年中还会进行一些调整。 -- PHP4 自古以来就是 EOL 并且没有获得任何安全补丁。我不会再在外部服务上使用它了。你应该说服你的老板允许更新运行到至少 v5.5 或更好的 v5.6:php.net/supported-versions.php#php-5.6 我认识 Jens,感谢您的建议。非常好的测试解决方案你的 =) 感谢您向我展示 Github 存储库。我开始担心“未维护的位”。请注意,只是表面上,因为它仍然可以通过我使用的现代代码从一个低调的测试框架中完成我想要的一切。 SimpleTest 在设置测试套件方面具有更大的灵活性,因为您可以在 php 代码中完成所有操作。因此,您可以使用完整的编程语言,而不仅仅是 xml 配置文件和终端参数。 PHPUnit 可能得到更多工具的支持,但更多地说明了 PHP 社区如何不断选择支持劣质的东西。【参考方案11】:

当有数千个函数要一次性测试时,phpunit 是一种选择,简单的测试由于它是基于 Web 的而不足。

我仍在使用简单的网络进行小规模测试。

两个都不错

【讨论】:

SimpleTest 不是纯粹基于网络的。到目前为止,我一直只在命令行中使用它。【参考方案12】:

这是从一个非常普通的 PHP 开发人员的角度来看的:

花了两天时间掌握PHPUnit,主要是在Eclipse下调试,最后放弃了。

我花了两个小时来设置 Simpletest,包括在 Eclipse 下调试。

也许我将来会发现 Simpletest 的不足之处,但到目前为止它已经很好地满足了我的需求:TestClasses、Mock 对象、测试代码调试和用于快速了解情况的 Web 界面。

再次:这是从一个非常普通的 PHP 用户的角度来看的(甚至不是开发人员 :-)

【讨论】:

以上是关于SimpleTest 与 PHPunit的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Python 和 ctype 访问 C 全局变量结构

Simpletest PHP 脚本浏览器...如何测试提交表单名称中包含 [ ] 的表单(基本上是数组格式)?

如何使用正则表达式在SimpleTest中编写AssertTags测试?

模拟测试和PHP的魔法__get方法

gradle-TestNG配置

定义事件