方法setUp()和tearDown()在每次测试之前和之后被调用。但实际上,是否有关于我为什么需要这个的真实示例?检查其他人的测试,我总是看到类似的东西:publicfunctionsetUp(){$this->testsub=newTestSubject();}publicfunctiontearDown(){unset($this->testsub);}publicfunctiontestSomething(){$this->assertSame('foo',$this->testsub->getFoo());}当然,这种方式和“旧的”局部变量方式几乎没有区别。
简而言之:phpunit在运行测试时可以使用多个数据提供者吗?例如,我有一个名为getById的方法,我需要为它运行成功和不成功的测试用例。成功的测试用例意味着它可以返回相应的记录。而对于不成功的,输入可以分为两类:无效和失败。invalid表示输入不合法,failed表示输入可能有效,但没有对应的ID对应的记录。所以代码是这样的:/***@dataProviderprovideInvalidId*@dataProviderprovideFailedId*/publicfunctiontestGetByIdUnsuccess($id){$this->assertNull($this->
我在测试中有一个模拟对象。真正的对象PageRepository使用__call()实现了一个神奇的方法,因此如果您调用$pageRepository->findOneByXXXX($value_of_field_XXXX),它将在数据库中搜索与该参数匹配的记录。有没有办法模拟那个方法?真正的方法调用看起来像这样:$homepage=$pageRepository->findOneBySlug('homepage');测试看起来像这样:$mockPageRepository->expects($this->any())->method('findOneBySlug')->will($t
我有一个使用ServiceB的ClassA。在某种情况下,ClassA最终应该不会调用ServiceB的任何方法。我现在想测试一下,确实没有调用任何方法。这可以按如下方式完成:$classA->expects($this->never())->method('first_method');$classA->expects($this->never())->method('second_method');...有没有办法简单地声明“不应该在这个对象上调用任何方法”,而不是必须为每个方法指定一个限制? 最佳答案 是的,很简单,试试这个:
http://four.laravel.com/docs/testing说“安装新的Laravel应用程序后,只需在命令行上运行phpunit即可运行测试。”phpunit无法识别,我也试过phpartisiantest和phpartisanphpunitphpunit是否在某个奇怪的文件夹中,或者它实际上不包含在Laravel中?我不想安装它,如果是的话有两个。 最佳答案 用Composer安装启动和运行PHPUnit的一种简单方法(不需要安装Pear和弄乱你想使用它的每个系统)是将它包含在你的composer.json文件中,比
我想查看在phpunit运行期间当前正在执行哪个测试。我使用--debug参数但仍然只得到点:$phpunit--debugPHPUnit3.7.19bySebastianBergmann.Configurationreadfrom/home/foo/bar/phpunit.xml..S.......I..contentsofphpunit.xml:./tests./src这可能是什么原因? 最佳答案 您想使用--testdoxphpunit--testdox 关于phpunit--de
我一直在为一个项目创建一个测试套件,虽然我意识到获得100%的覆盖率并不是一个应该努力实现的指标,但其中有一个奇怪的地方我想澄清一下代码覆盖率报告。看截图:因为被测试方法的最后一行是return,所以最后一行(只是一个右括号)显示为从未被执行,因此整个方法被标记未在概述中执行。(要么这样,要么我没有正确阅读报告。)完整方法:staticpublicfunction&getDomain($domain=null){$domain=$domain?:self::domain();if(!array_key_exists($domain,self::$domains)){self::$dom
我想知道什么是“PHPUnit中的严格模式”?例如:phpunit--strict或者在phpunit.xml中我打开它只是为了尝试,但我的测试开始失败PHP_Invoker_TimeoutException:Executionabortedafter1second 最佳答案 PleasenotethatPHPUnitswallowsalloutputthatisemittedduringtheexecutionofatest.Instrictmode,atestthatemitsoutputwillfail.这就是我在文档中可以找
有时在我的代码中,我会检查特定对象是否实现了接口(interface):if($instanceinstanceofInterface){};但是,在PHPUnit中创建所述接口(interface)的模拟,我似乎无法通过该测试。//classnameisMock_Interface_431469d7,doesnotpassabovecheck$instance=$this->getMock('Interface');我知道拥有一个名为Interface的类与实现Interface的类不同,但我不知道如何处理这个问题。我是否被迫模拟一个实现接口(interface)的具体类?这不会违背
我正在尝试使用PHPUnit的returnValueMap()stub读取的结果。它没有产生预期的结果,但等效的returnCallback()可以。我做了我的testcase如果您想自己检查,可以使用。returnValueMap()$enterprise=$this->getMock('Enterprise',array('field'));$enterprise->expects($this->any())->method('field')->will($this->returnValueMap(array(array('subscription_id',null),array(