Questions tagged «phpunit»

PHPUnit是面向程序员的PHP测试框架。它是用于单元测试框架的xUnit体系结构的一个实例。

5
如何运行特定的phpunit xml testsuite?
我如何选择要执行的特定测试套件? $ phpunit-配置config.xml config.xml: <testsuites> <testsuite name="Library"> <directory>library</directory> </testsuite> <testsuite name="XXX_Form"> <file>library/XXX/FormTest.php</file> <directory>library/XXX/Form</directory> </testsuite> </testsuites>
83 xml  phpunit 

17
phpunit require_once()错误
我最近通过pear安装程序在服务器上安装了phpunit。 当我运行测试时,出现以下错误: PHP警告:require_once(PHPUnit / Util / Filter.php):无法打开流:第44行的/ usr / bin / phpunit中没有此类文件或目录 PHP致命错误:require_once():无法在第44行的/ usr / bin / phpunit中打开所需的'PHPUnit / Util / Filter.php'(include_path ='。:/ usr / bin / php') 搜索后,我尝试对服务器上php.ini文件中的include_path进行一些修改。但这还没做。 知道是什么原因造成的吗?

13
通过PEAR安装PHPUnit
我通过PEAR 1.9.0安装PHPUnit 3.4.6时遇到问题。在发现频道pear.phpunit.de并尝试使用以下命令之一后: 梨安装phpunit / PHPUnit 梨安装--alldeps phpunit / PHPUnit 梨安装--onlyreqdeps phpunit / PHPUnit 它失败,给我以下错误: 软件包“ pear.phpunit.de/PHPUnit”无可用发布 安装失败 我发现有相同问题的人有多个线程,但是将PEAR升级到最新版本通常对他们有用。另外,似乎几乎没有用于Windows的PHPUnit安装教程。 编辑: 我也尝试过将preferred_state更改为beta;没有帮助。 我还尝试获取所有可用软件包的列表: 梨远程列表-c phpunit 它给了我另一个错误: 无法下载非HTTP URL“ /c/categories.xml”
78 php  phpunit  pear 

4
如何编写用于与外部API交互的集成测试?
首先,我的知识是: 单元测试是那些测试一小段代码(大多数是单一方法)的测试。 集成测试是测试多个代码区域之间的交互的测试(希望它们已经具有自己的单元测试)。有时,被测代码的某些部分需要其他代码以特定方式起作用。这是Mocks&Stubs出现的地方。因此,我们模拟/存根代码的一部分以非常具体地执行。这使我们的集成测试可以预期地运行而没有副作用。 所有测试都应能够独立运行而无需数据共享。如果必须进行数据共享,则表明系统耦合不够充分。 接下来,我面临的情况是: 与外部API(特别是RESTful API,将通过POST请求修改实时数据)进行交互时,我了解我们可以(应该吗?)模拟出与该API的交互(在此答案中更雄辩地说),以进行集成测试。我也了解我们可以对与该API交互的各个组件进行单元测试(构造请求,解析结果,抛出错误等)。我不明白的是如何真正做到这一点。 所以,最后:我的问题。 如何测试与具有副作用的外部API的交互? 谷歌的Content API for shopping是一个很好的例子。为了能够执行手头的任务,需要大量的准备工作,然后执行实际的请求,然后分析返回值。其中一些没有任何“沙盒”环境。 执行此操作的代码通常具有相当多的抽象层,例如: <?php class Request { public function setUrl(..){ /* ... */ } public function setData(..){ /* ... */ } public function setHeaders(..){ /* ... */ } public function execute(..){ // Do some CURL request or some-such } …

11
我可以在PHPUnit中“模拟”时间吗?
...不知道'mock'是否正确。 无论如何,我有一个继承的代码库,我试图为此编写一些基于时间的测试。为了不太含糊,该代码与查看某项的历史并确定该项是否现在具有时间阈值有关。 在某些时候,我还需要测试向该历史记录添加一些内容,并检查阈值现在是否已更改(并且显然正确)。 我遇到的问题是,我正在测试的部分代码使用对time()的调用,因此基于我的事实,我很难确定确切的阈值时间是多少。我不太确切地知道何时会调用time()函数。 所以我的问题基本上是这样的:我是否可以通过某种方式“替代” time()调用,或者以某种方式“模拟”时间,以使测试在“已知时间”内工作? 还是我只需要接受这样一个事实,即我将不得不在正在测试的代码中做某件事,以某种方式允许我在需要时强迫它使用特定的时间? 无论哪种方式,是否都存在开发对时间敏感的,易于测试的功能的“通用做法”? 编辑:我的问题也有一部分是事实,即历史发生的时间会影响阈值。这是我部分问题的一个例子... 想象一下,你有一根香蕉,而当你需要把它吃掉的时候,你正在努力解决。假设它将在3天内失效,除非用某种化学药品喷洒了,在这种情况下,我们从喷涂开始算起将有效期增加了4天。然后,我们可以通过冻结将其再添加3个月,但是如果将其冻结,则融化后只有1天的时间可以使用它。 所有这些规则都是由历史时间决定的。我同意我可以在几秒钟内使用Dominik的测试建议,但是我的历史数据是什么?我是否应该立即“创建”它? 正如您可能无法知道的那样,我仍在尝试掌握所有这种“测试”概念;)
75 php  phpunit 

6
如何测试字符串是否在PHPUnit中包含另一个字符串?
我似乎在PHPUnit中找不到一个断言,该断言只是测试一个字符串是否包含在另一个字符串的某个位置。尝试做这样的事情: public function testRecipe() { $plaintext = get_bread_recipe(); $this->assertStringContains('flour', $plaintext); } 我要代替什么真正的主张assertStringContains?在这种情况下,我宁愿不必担心正则表达式,因为绝对不需要它。 如此简单,以至于我必须忽略了某些东西,但我只是想不通!滑稽足够有assertStringStartsWith()和assertStringEndsWith()! 更新:我知道strpos() !== false可以使用,但我正在寻找更清洁的东西。如果我仍然使用原始的PHP函数,那么所有断言的重点是什么...
75 php  phpunit 

2
PHPUnit最佳实践来组织测试
我目前将从项目的phpunit测试开始。因此,我正在研究某些项目(例如Zend),以了解它们的工作方式以及如何组织测试。 大多数事情都很清楚,我唯一有问题的是如何正确组织测试套件。Zend有一个AllTests.php,可从中加载其他测试套件。 仔细查看该类是PHPUnit_Framework_TestSuite用来创建一个套件对象,然后向其中添加其他套件的,但是如果我查看PHPUnit文档以组织3.4之后的PHPUnit版本中的测试,则只有XML或FileHierarchy的描述。使用类来组织测试的一个已删除。 我尚未发现此方法已过时的任何东西,而Zend之类的项目仍在使用它。 但是,如果过时了,我将如何使用xml配置以相同的结构组织测试?执行所有测试都没问题,但是如果我只想执行几个测试,我将如何组织这些测试(在xml中)。也许在我仅指定要运行的几个测试/测试套件的地方创建几个xml? 因此,如果我只想测试应用程序的module1和module2,我会为每个应用程序增加一个xml,并只为其中的那些模块(模块使用的类)定义测试套件。还有为所有测试定义测试套件的工具吗? 还是@group在特定测试中使用注释将它们标记为module1或module2更好? 在此先感谢您为我提供了一些最佳做法。
74 php  phpunit 

10
用PHPUnit模拟私有方法
我有一个关于使用PHPUnit模拟类中的私有方法的问题。让我举一个例子: class A { public function b() { // some code $this->c(); // some more code } private function c(){ // some code } } 我该如何对私有方法的结果进行存根以测试公共函数的更多代码部分。 在这里解决了部分阅读
73 php  mocking  phpunit 

1
phpunit随机重启测试
我正在尝试使用PHPUnit测试我的symfony2应用程序。我有一个项目可以正常运行,但是在我的另一个项目中,我有一个奇怪的行为,PHPUnit要么在所有测试即将结束时随机停止执行测试套件,然后重新启动,或者在完成测试套件并编写代码后重新启动测试覆盖范围。其他时间它正常运行。 这是一些输出,可以看到正在发生的事情(测试一遍又一遍地重启): PHPUnit 3.6.10 by Sebastian Bergmann. Configuration read from C:\workspace\cllctr\app\phpunit.xml ................................................................. 65 / 83 ( 78%) ...........PHPUnit 3.6.10 by Sebastian Bergmann. Configuration read from C:\workspace\cllctr\app\phpunit.xml ................................................................. 65 / 83 ( 78%) ...PHPUnit 3.6.10 by Sebastian Bergmann. Configuration read from C:\workspace\cllctr\app\phpunit.xml ................................................................. 65 / 83 ( 78%) ............PHPUnit 3.6.10 by …


5
PHPUnit:如何创建一个用于类中所有测试一次的函数?
我有一个PHPUnit测试用例类(由一些测试功能组成)。我想编写一个oneTimeSetUp()针对该类中的所有测试被调用一次的函数(与标准setUp()函数不同,该函数针对该类中的每个测试被调用一次)。换句话说,我正在寻找与JUnit@BeforeClass注解等效的PHPUnit 。 与oneTimeTearDown()功能相同的问题。 有可能在PHPUnit中这样做吗?
72 php  phpunit 

1
如何在PHPUnit模拟对象中测试第二个参数
这就是我所拥有的: $observer = $this->getMock('SomeObserverClass', array('method')); $observer->expects($this->once()) ->method('method') ->with($this->equalTo($arg1)); 但是该方法应采用两个参数。我只测试第一个参数正确传递(如$ arg1)。 如何测试第二个参数?
68 php  phpunit 

1
PhpStorm:不建议使用类名进行调用
当我尝试在PhpStorm中运行测试时,我看到以下内容: Sebastian Bergmann和贡献者的PHPUnit 8.5.2。 警告:不建议使用类名进行调用 PhpStorm如何处理PHPUnit自动加载器脚本并期望其文件名与test相同,这可能是一个问题。 有任何转机吗?
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.