Tag: phpunit

如何声明结果是PHPUnit中的一个整数?

我想能够testing结果是一个整数(1,2,3 …),其中函数可以返回任何数字,例如: $new_id = generate_id(); 我以为这会是这样的: $this->assertInstanceOf('int', $new_id); 但是我得到这个错误: PHPUnit_Framework_Assert :: assertInstanceOf()的参数#1必须是类或接口名称

PHPUnit达到100%的代码覆盖率

我一直在为一个项目创build一个testing套件,虽然我意识到获得100%的覆盖率并不是应该努力的指标,但是代码覆盖率报告中有一些奇怪的地方,我希望它澄清。 看截图: 因为被testing的方法的最后一行是return ,所以最后一行(它只是一个右括号)显示为从未执行,因此整个方法在总览中被标记为未执行。 (要么,要么我没有正确阅读报告。) 完整的方法: static public function &getDomain($domain = null) { $domain = $domain ?: self::domain(); if (! array_key_exists($domain, self::$domains)) { self::$domains[$domain] = new Config(); } return self::$domains[$domain]; } 有没有这个原因,或者是一个小故障? (是的,我阅读了如何获得PHPUnit的100%代码覆盖率 ,不同的情况虽然相似。) 编辑: 通过报告,我注意到在代码中其他地方的switch语句也是如此。 所以这个行为至less在一定程度上是一致的,但是对于我来说却是莫名其妙的。 EDIT2: 我在OS X上运行:PHPUnit 3.6.7,PHP 5.4.0RC5,XDebug 2.2.0-dev

在OSX上设置PHPUnit

虽然我确信其他人最终还是弄清楚了这一点,但是我一直在关注着各种文件,并且一直在困难的时候。 http://www.phpunit.de/manual/current/en/installation.html 使听起来很容易。 然而取决于你的设置,你可能会掉下一个兔子洞。 PEAR例如必须是高于1.8.1的版本。 我当时有1.8.0,所以我去了解如何更新PEAR PEAR upgrade-all 给出一个错误。 没有访问权限 sudo PEAR upgrade-all 工作,但升级用户“sudo”拥有的PEAR安装(而不是您的主要帐户…或类似的东西,简短的版本是5,它显然不工作) cd ~ pico .bash_profile 加 export PATH=/usr/local/bin:$PATH 当你键入PEAR时,给你正确的PEAR,你终于准备好安装PHPUnit指令的第1步。 pear channel-discover pear.phpunit.de 错误。 您无权访问/ usr / local / temp sudo chmod 777 /usr/local/temp 错误。 您无权访问/usr/local/temp/channel.xml sudo chmod 777 /usr/local/temp/channel.xml pear channel-discover pear.phpunit.de 错误。 Registry directory is not writeable by the current user […]

当使用$ mock-> expect($ this-> at(…))时,PHPUnit“Mocked方法不存在”

我遇到了PHPUnit模拟对象的一个​​奇怪的问题。 我有一个方法应该被调用两次,所以我使用“在”匹配。 这是第一次调用方法,但由于某种原因,第二次调用方法,我得到了“模拟方法不存在”。 我之前使用过“at”匹配器,从来没有遇到过这种情况。 我的代码看起来像这样: class MyTest extends PHPUnit_Framework_TestCase { … public function testThis() { $mock = $this->getMock('MyClass', array('exists', 'another_method', '…')); $mock->expects($this->at(0)) ->method('exists') ->with($this->equalTo('foo')) ->will($this->returnValue(true)); $mock->expects($this->at(1)) ->method('exists') ->with($this->equalTo('bar')) ->will($this->returnValue(false)); } … } 当我运行testing时,我得到: Expectation failed for method name is equal to <string:exists> when invoked at sequence index 1. Mocked method does not exist. 如果我删除第二个匹配器,我没有得到错误。 有没有人遇到过这个? […]

phpunit – testing是痛苦的缓慢

我在unit testing的世界里越来越深入。 我遇到的一个问题,这是我想要的反馈,当一个运行多个testing套件,也许只是我,但我需要使用参数 – 进程隔离我的testing通过。 我可以单独运行我的任何套件,但没有问题,但是如果我运行时没有使用–process-isolation,那么运行我迄今为止拥有180个断言的6-7套件将会失败。 问题是使用这个参数使testing持续35分钟,而通常的2.5分钟。 这是一个懒惰的等待。 这个问题与使用模拟的DI容器进行特定的testing有关,当testing套件运行链接时容器不能正确地重新初始化。 在DI-Container上设置的静态属性可以testing预期的故障,使得以下套件中的testing失败。 容器有一个参数,可以将包含的对象保存在静态variables中,以便在每次调用时返回相同的实例。 一个变相的单身人士。 而且这在应用程序级别运行良好,这只是一个滋扰testing。 我可以避免这个容器参数,并编写应用程序不使用静态属性,但为方法的缘故避免一个有用的语言结构似乎是矫枉过正。 也许我做错了什么(我真的希望如此!)但是我有一个印象,如果一个人想在每个testing都以干净的状态运行SUTtesting,那么就不会使用–process-isolation。 这使得testing非常耗时,并且从中获得一点乐趣。 我在编码时单独运行套件和testing,并在主要提交之前在后台运行套件,从而绕过了这个问题。 是我正在经历的正常,有没有办法对付这个? 你如何确保testing时间是合理的? 如何处理静态以便不影响testing? 任何洞察赞赏/评论赞赏。

PHPUnit模拟对象和静态方法

我正在寻找最好的方法去testing下面的静态方法(特别是使用Doctrine模型): class Model_User extends Doctrine_Record { public static function create($userData) { $newUser = new self(); $newUser->fromArray($userData); $newUser->save(); } } 理想情况下,我会使用一个模拟对象来确保“fromArray”(使用提供的用户数据)和“save”被调用,但这是不可能的,因为方法是静态的。 有什么build议么?

PHPUnit:assertInstanceOf()不起作用

我需要检查一个variables是否是用户types的对象。 用户是我的课$user我的对象 $this->assertInstanceOf($user,User); 这是行不通的,我有一个使用未定义的常量用户 – 假定“用户” 在此先感谢您的帮助

我怎样才能让PHP自动完成PHPUnit?

我正在使用Symfony2,所有的东西都安装好了,到目前为止我的testing工作非常好。 我想要自动完成PHPUnit的方法。 Symfony的WebTestCase类从PHPUnit_Framework_TestCase扩展如下: abstract class WebTestCase extends \PHPUnit_Framework_TestCase 虽然父类被突出显示为不存在。 我怎样才能告诉我的IDE使用PHPUnit的库? 我正在使用PHPStorm PHPUnit可以通过path/Users/myUser/pear/share/pear/PHPUnit/

selenium2(WebDriver)和Phpunit?

任何人都知道如何使用selenium2与Phpunit? PHP中是否有Selenium 2样本?

在PHPUnit中,如何在连续调用模拟方法时指出与()不同?

我想用不同的预期参数两次调用我的模拟方法。 这是行不通的,因为expects($this->once())在第二次调用时会失败。 $mock->expects($this->once()) ->method('foo') ->with('someValue'); $mock->expects($this->once()) ->method('foo') ->with('anotherValue'); $mock->foo('someValue'); $mock->foo('anotherValue'); 我也试过了: $mock->expects($this->exactly(2)) ->method('foo') ->with('someValue'); 但是,如何添加一个with()来匹配第二个调用呢?