Zend_Test_PHPUnit_ControllerTestC
全部标签 使用ZendFramework设置环境(生产/暂存/开发)的标准做法是在Apache配置(或.htaccess)中使用SetEnv来设置APPLICATION_ENV。这显然适用于Web请求,但是运行命令行脚本(仍然是应用程序的一部分,使用相同的Bootstrap,并依赖于正确的APPLICATION_ENV)呢?有什么最佳做法吗?现在我只是将一个.environment.php文件放到我的cli目录中——如果它存在,它就会被包含(类似于.htaccess我猜测),并且可以用来设置环境。 最佳答案 从终端对于(linux)仅命令行用
我正在为使用模拟调用另一个类的方法的类方法编写单元测试,只有需要调用的方法被声明为final方法,因此PHPUnit无法模拟它。我可以采用其他方法吗?例子:要模拟的类classClass_To_Mock{finalpublicfunctionneedsToBeCalled($options){...}}我的测试用例classMyTestextendsPHPUnit_Framework_TestCase{publicfunctiontestDoSomething(){$mock=$this->getMock('Class_To_Mock',array('needsToBeCalled')
有什么好的方法可以使用PHPUnit模拟抽象类中的具体方法吗?到目前为止我发现的是:expects()->will()使用抽象方法可以正常工作它不适用于具体方法。改为运行原始方法。使用mockbuilder并将所有抽象方法和具体方法提供给setMethods()是可行的。但是,它要求您指定所有抽象方法,使测试变得脆弱且过于冗长。MockBuilder::getMockForAbstractClass()忽略setMethod()。以下是一些单元测试,用于说明以上几点:abstractclassAbstractClass{publicfunctionconcreteMethod(){re
在我的PHPUnit测试中,我想断言我正在测试的类扩展了另一个类。我如何使用PHPUnit执行此操作? 最佳答案 使用assertInstanceOf()而不是PHP内置的instanceof运算符或函数,以便您获得有意义的失败消息。functiontestInstanceOf(){$obj=newFoo;self::assertInstanceOf('Bar',$obj);}...Failedassertingthatisaninstanceofclass"Bar". 关于PHPUni
给定以下方法:publicfunctionfoo($callback){call_user_func($callback);}我如何使用PHPUnit测试回调是否真的被调用了?foo()方法没有返回值。它唯一的工作是执行给它的回调,以及其他一些查找和杂项。为简单起见,我省略了处理。我试过这样的:publicmethodtestFoo(){$test=$this;$this->obj->foo(function()use($test){$test->pass();});$this->fail();}...但是显然没有pass()方法,所以这不起作用。 最佳答案
是否可以在同一进程中运行一组phpUnit测试,但确定要在其自己的进程中运行的特定测试?我一般用@runTestsInSeparateProcesses@preserveGlobalStatedisabled对于整个测试套件,但我只需要单独运行一个方法,我希望在单个进程中运行其余方法可以提高速度。谢谢 最佳答案 正如您在PHPUnitmanual中看到的那样你可以使用@runInSeparateProcess标签:classMyTestextendsPHPUnit_Framework_TestCase{/***@runInSepar
我想在Zend_Db中生成这个复杂的WHERE子句:SELECT*FROM'products'WHEREstatus='active'AND(attribute='one'ORattribute='two'OR[...]);我试过了:$select->from('product');$select->where('status=?',$status);$select->where('attribute=?',$a1);$select->orWhere('attribute=?',$a2);然后产生:SELECT`product`.*FROM`product`WHERE(status='
Xdebug已加载,但未作为zend扩展加载。这是什么意思?如何解决这个问题? 最佳答案 此错误表示您使用“extension=”来加载Xdebug。这可能在您的普通php.ini中,或者在某些发行版喜欢添加的名为xdebug.ini的文件中。在任何情况下,Xdebug都需要作为Zend扩展加载,以实现某些功能,例如单步调试。由于Xdebug不能作为普通扩展使用,它也可能会崩溃和烧毁。加载Xdebug作为Zend扩展的语法取决于PHP版本和构建。我建议你使用http://xdebug.org/wizard.php为您提供正确的线路。
每当磁盘上的文件发生更改时,我想运行我的PHPUnit测试(或至少其中的一个子集)。与您可以使用“gruntwatch”执行的操作非常相似。我有一个项目,其中我同时拥有JS和PHP,并且正在使用Grunt。在那里,我向PHPUnit支付费用,让它在我使用gruntwatch的JS测试之上运行。虽然这工作得很好,但在纯PHP项目中执行此操作似乎非常麻烦。我需要引入grunt,并添加对节点的依赖。另外,我有很多这样的PHP项目。因此,需要一个更简单的解决方案。 最佳答案 你可以使用nodewatch,这很不错:运行npminit设置一个
我是PHPUnit的初学者。这是我创建的示例测试类:classNewTestextendsPHPUnit_Framework_TestCase{protected$foo;functiontestFirst(){$this->foo=true;$this->assertTrue($this->foo);}/***@dependstestFirst*/functiontestSecond(){$this->assertTrue($this->foo);}}当执行testSecond时,它抛出一个错误“UndefinedpropertyNewTest::$foo”。为什么会这样?PHPUn