SimpleTest与PHPunit


127

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

每个组件都有什么特定的强度,使其适合任何特定情况?


我会选择PHPUnit的情况要好得多
joao baptista

9
...为什么?尝试解释您的答案,提供资源/链接
Manuel 2013年

<snark>为什么不能同时使用?</ snark>
Agi Hammerthief

Answers:


90

这个问题已经过时了,但是由于它仍然在增加流量,并且回答了我,尽管我在这里再次陈述了我的观点,所以我已经在其他一些(较新的)问题上做了。

真的很困惑,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输出所有标准日志文件以进行代码覆盖和测试报告,因此PHPUnit与每台持续集成服务器都可以正常工作。
  • 简单测试没有。尽管这不是一个大问题,但是一旦您停止“仅仅测试”并开始开发软件,它就会占用您大量的时间(是的,这是具有争议性的:)不要太在意它。
  • PHPUnit被积极地维护,稳定,并且非常适合每种代码库,每种方案以及您要编写测试的每种方式。
  • (主观)PHPUnit提供的代码覆盖率报告比Simpletest好得多
  • 使用PHPUnit,您还可以在IDE中获得这些报告(Netbeans,Eclipse等)。
  • 也有一些建议web interface to phpunit tests

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

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

或对于仅下载 phar并运行的Windows :

php phpunit-.phar

或使用受支持的作曲家安装方式时

"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的贡献者。


5
我发现,与phpunit的网络测试相比,simpletest的网络测试更容易设置和运行。由于使用php几乎是必须的,因此这对于中小型项目是一个胜利,您只想在其中立即投入一个测试框架,而重要的是简单的测试级别。例如,除了网络测试,我倾向于仅在simpletest中使用assertTrue()方法。网络测试当然会变得更加复杂,但是不必过于复杂。
卡扎伊2012年

1
“>由于php几乎是必须的”-我对此表示强烈反对。我还没有看到通过浏览器运行其测试的任何 php项目(或框架)。它带来了很多问题,却没有任何实际好处。其中PHP代码是一个共享的主机系统上使用FTP同步是死了(开发时代手指交叉)没有,哪怕是很小的,项目需要运行Web服务器(最多的一个PHP的船舶开箱即用)。通过浏览器而不是cli或IDE进行UNIT测试只是一种罕见的用例,我认为这根本不重要。
edorian 2012年

13
在PHPUnit上考虑SimpleTest的一个重要原因是后者是一个命令行工具,必须将其安装在运行测试的服务器上,这有时比仅include读取SimpleTest .PHP文件要困难得多(正如其他人所解释的那样)。对于构建自己的测试环境的专业程序员而言,PHPUnit听起来很难被击败,但是如果将测试系统集成到基于PHP的开源应用程序中,那么该应用程序的“开发人员”充其量是(所谓的)“职业程序员”,那么无论如何,SimpleTest的简单性对我来说确实具有吸引力。FWIW。
MikeSchinkel 2012年

2
@MikeSchinkel我完全同意。我们将SimpleTest用作定制应用程序框架的基于浏览器的集成测试解决方案。它始终可用,除了框架源中包含的svn pull之外,不需要任何安装配置。我们移至PHPUnit进行CIS集成。因为我们是Windows商店,所以PHPUnit可能是安装和配置的噩梦,而且我们的许多初级开发人员只是破坏环境或失去测试意愿。
加文2013年

1
幻灯片的链接已断开。
Dmitri Zaitsev

35

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

我喜欢PHPUnit的原因是它与其他PHP开发人员工具集成在一起,例如phing(SimpleTest也是如此),phpUnderControlXinc。从3.0版开始,它具有模拟支持,并且正在积极开发中,并且该文档非常出色。

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

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


4
请注意,phing的网站说它支持SimpleTest
philfreo 2010年

18
  • 我不明白如何下载和安装PHPUnit。
  • 但是,我可以轻松地了解如何安装SimpleTest。

    (据我所记得,PHPUnit的说明说的是“通过PEAR安装它,我们不会以任何其他方式给出任何说明”)。

  • http://www.phpunit.de/manual/current/zh/installation.html

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

所以Simpletest为我赢了。


4
我想自从您发布答案以来,文档已更改。今天,您只需键入3个命令,它就会被安装,您甚至不必自己下载任何内容。
Anti Veeranna

5
您可以通过PEAR安装PHPUnit,手动下载它或从github中获取最新代码。主页上有指向安装说明的明确链接。SimpleTest只给了我一个选项,它指向sourceforge,并且它有无数的广告...
Potherca

1
在Windows下,很难安装PHPUnit。我必须将其安装在2个工作站上。在PEAR IRC香奈儿的帮助下,第一个花了3个小时。对于第二个操作系统(相同的操作系统),我从未成功。也就是说,在Linux上是一种魅力。
FMaz008 2011年

1
SimpleTest +1易于安装易于使用。PHPUnit功能强大,但是最简单,可以满足我的需求。
张翔

自从09年以来,情况可能已经发生了变化,但是在Windows上只需几个命令就可以在几秒钟内安装PHPUnit。
Cypher


13

公认答案中提到的一半要点是不正确的:

SimpleTest

  • 设置更简单(提取到文件夹,包括并运行)
  • 只需将文件夹检入版本控制中(现在尝试使用phpunit进行此操作:)
  • 更少的依赖关系和大量的扩展(webtester,formtester,auth)
  • 一个好的代码覆盖率报告程序,它易于扩展(点,函数名称,颜色)
  • 代码覆盖率摘要(最终出现在PHPUnit 4.x中)
  • 一个不错的网络运行程序和一个ajax网络运行程序,具有组和单个文件执行
  • 更好的差异工具(没有空白或换行问题)
  • 一个适配器/包装器,通过phpUnit运行SimpleTests,反之亦然
  • 兼容性PHP5.4 +

不足之处:

  • 不是行业标准(PHPUnit)
  • 没有积极维护

1
对我和我的老板php4服务器^^“仍然有用
javier_domenech 2016年

谢谢。我已经升级了SimpleTest的代码库,以与更新的PHP版本一起使用,并且在这一年中还会进行一些调整。-PHP4自古以来就是EOL,并且没有任何安全补丁。我不再在外部服务上使用它。您应该说服老板允许至少运行v5.5或更高版本的v5.6:php.net/supported-versions.php#php-5.6
Jens A. Koch,

我认识Jens,感谢您的建议。非常好的测试解决方案
javier_domenech,2016年

1
=)感谢您向我展示Github存储库。我已经开始担心“未维护的位”。请仅从表面上讲,请注意,因为它仍然可以满足我使用低级测试框架和我使用的现代代码的所有需求。
jeteon

SimpleTest在设置测试套件方面具有更大的灵活性,因为您可以在php代码中完成所有操作。因此,您可以使用完整的编程语言,而不仅仅是xml配置文件和终端参数。工具可能会更多地支持PHPUnit,但更多地介绍了PHP社区如何继续选择支持劣等产品。
still_dreaming_1 2016年

8

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

因此,我想说的是SimpleTest的优势在于它重量轻且可移植。

SimpleTest还附带了非常简单的HTML GUI,如果需要,可以很容易地对其进行扩展。据我所知,PHPUnit不包括HTML GUI,但是有可供下载的GUI :,例如Cool


啊,伙计,我完全无意中拒绝了,直到第二天才意识到这一点。现在我的投票已锁定...对不起。
still_dreaming_1 2016年

8

好吧,我制作了一个基于phpUnit Web的UI测试用例运行程序,并将其在sourceforge上可用。使用ajax并具有相当不错的界面,如果您想试一试,请在sourceforge上进行检查。项目名称为phpunitwebui,网站为http://phpunitwebui.sourceforge.net/


4

如前所述,这主要是一个优先选择,因为两者都将运行您为此编写的测试并报告结果。

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


我没有得到这个分析。您是说要通过phpunit的eclipse插件而不是本地apache设置来测试浏览器类型的功能吗?
卡扎伊2012年

不,我是说在我的项目中,因为没有浏览器类型的功能,所以我通过eclipse使用phpunit。
T0xicCode

2

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

我花了两天的时间来掌握PHPUnit,大部分时间是我试图放弃的Eclipse调试。

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

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

再说一遍:从一个非常随意的PHP用户(甚至不是开发人员:-)的角度来看


1

我已经有一段时间没有检查简单测试了,上一次它有一个eclipse插件,这对我来说是一个主要因素,但是很长一段时间都没有更新。Sebastian Bergmann仍然非常积极地在PHPUnit上工作,但是它仍然缺少一个很好的eclipse插件-但是它包含在新的Zend Studio中。


1

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

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


我一直只<phpunit backupGlobals="false">在配置XML中使用过,在测试中对全局变量没有任何问题……
Potherca 2014年

@ mr1031011您的链接没有有用的地方。也许您的意思是?:github.com/Enhance-PHP/Enhance-PHP
user12345

@Potherca告诉我-最初在遗留代码项目中,全局变量存在很多问题,我想我尝试了所有注释@backupGlobals @backupStaticAttributes @runInSeparateProcess @preserveGlobalState,global $xxx及其所有组合,然后尝试--no-globals-backup并突然看到了所有按预期工作。:D
conny 2014年

-2

当有成千上万的功能需要一次测试时,phpunit是必经之路,简单的测试由于基于Web而无法实现。

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

但是两者都很好


SimpleTest 并非完全基于Web。到目前为止,我仅在命令行中使用过它。
jeteon's
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.