我想测试(使用 PHPUnit)一个包含 foreach 循环的方法。我想要完整的路径覆盖。原始代码有点太复杂,所以我在下面创建了一个最小的示例来说明我的问题。foreachPHP中的循环有3种情况。(我使用 PHP 8.2。)
public function dodo(array $a)\n {\n foreach ($a as $one) {\n return $one;\n }\n\n return null;\n }\nRun Code Online (Sandbox Code Playgroud)\n很容易涵盖前两个:非空数组和空数组。但是我如何传递一个不可迭代的东西作为函数参数呢?我尝试了几种方法,但我\xe2\x80\x99已经得到了类型错误。
\n$something->dodo(null); # TypeError\n\ncall_user_func([$something, 'dodo'], null); # TypeError\n\n$rClass = new ReflectionClass($something);\n$rMethod = $rClass->getMethod('dodo');\n$rMethod->invoke($something, null); # TypeError\nRun Code Online (Sandbox Code Playgroud)\n我不想\xe2\x80\x99 不想从方法定义中删除或更改类型。这会使代码的可读性降低一些。有办法解决吗?如何编写一个涵盖 foreach 循环的所有情况的测试?
\n换句话说:\n我如何使用dodo错误类型的参数调用?我想编写具有非常高的代码路径覆盖率的测试。
目前我正在为报告功能编写测试,项目获得的功能越多,需要编写更多报告
在我的案例报告中得到一些"搜索"参数和限制,如行数等
现在我的问题:任何人都知道如何使用phpunit为一个具有众所周知的可能参数的函数自动生成测试用例?
我读了一些像其他语言的快速检查工具,但是为PHP存在自动测试生成吗?或者有人建议如何自动创建测试?
谢谢
我读过我必须能够使用一个命令在我的站点中运行所有单元测试,所以我创建了一个bat文件来执行它.
即使在结束前暂停,在phpunit命令之后,单元测试的结果也会在屏幕上闪烁.
@echo off
cd c:\
cd xampp
cd htdocs
cd light
cd myworks
echo on
set /p site=The site:
set /p version=The version:
set /p location=The location:
phpunit "%site% v%version%/%location%"
pause
Run Code Online (Sandbox Code Playgroud)
我的另一个带有java%文件夹%/%file%的批处理文件运行java软件,然后暂停.
@echo off
cd c:\
cd Codes
cd 1st general - Head First Java
echo on
set /p folder=Type a folder:
set /p file=Type a file without extension:
java %folder%/%file%
pause
Run Code Online (Sandbox Code Playgroud)
更新:使用SimpleTest运行单元测试比使用phpUnit更容易.
我正在围绕PHPUnit,并试图为现有的类构建一个测试用例.
该类是一个静态配置类,用于获取,设置和列出应用程序中可用的配置选项.
这个班级非常严格.如果我尝试使用不兼容的值设置配置设置,或者配置设置不存在,E_USER_ERROR则抛出a,停止执行脚本.即使它不是错误处理的艺术,它也适用于本课程的目的.该类中的错误始终是编程错误的结果,而不是用户输入错误.
这具有很大的优势,您无需担心如何处理或记录错误消息,从而使代码保持苗条.输出消息(或不在生产中),die(),完成.
但是,使用单元测试,我看不出如何继续使用经典的PHP错误.我将不得不将函数转换为返回成功标志,或抛出异常.
我对么?
或者PHPUnit中是否有一种方法可以预期错误,因为有预期的异常?我马上看不到任何东西.
我正在使用Zend_Test_PHPUnit_ControllerTestCase来测试我的控制器.此类提供了各种方法来测试呈现的输出,但我不想让我的视图脚本参与其中.我想测试一下我的观点.有没有办法访问到控制器视图对象?
这是一个例子,我正在尝试做什么:
<?php
class Controller extends Zend_Controller_Action
{
public function indexAction()
{
$this-view->foo = 'bar';
}
}
class ControllerTest extends Zend_Test_PHPUnit_ControllerTestCase
{
public function testShowCallsServiceFind()
{
$this->dispatch('/controller');
//doesn't work, there is no such method:
$this->assertViewVar('foo', 'bar');
//doesn't work, end_Test_PHPUnit_ControllerTestCase has no getView method:
$this->assertEquals(
'bar',
$this->getView()->foo
);
}
}
Run Code Online (Sandbox Code Playgroud) 我最近听到很多人争论使用PHP测试功能,如PHPunit和SimpleTest以及他们选择的IDE(Eclipse for me).在谷歌搜索主题后,我仍然很难理解使用这些测试框架来加速开发的利弊.
如果有人能够在更基本的层面上为我解释这一点,我会非常感激.我正在使用PHP5作为通知.
非常感谢!
我已经使用Zend Framework研究了PHPUnit的一些示例,但有一部分我不理解.
在大多数示例中,Application Bootstrap从setUp()Method中的某种baseClass运行.
为什么不__construct()呢?有什么好理由吗?
情况如下.我的计算机上有一个本地(开发)PHP服务器(Win + IIS),我想在远程服务器上调用一个函数,因为远程服务器(linux)上有一个不能在我的本地计算机上运行的可执行文件.
所以在远程服务器上将是一个简单的PHP页面,它使用给定的参数调用可执行文件并返回结果.
我可以想象从javascript到这个远程PHP页面进行ajax调用,但在我的情况下,我在本地使用PHPUnit,有时我需要为特定数据(可执行文件提供)调用此远程页面.
所以我的问题是 - 如何从PHP(本地)到PHP(远程)进行调用?网络服务是可行的方式还是可以更简单地完成?
PHP Notice: Please no longer include "PHPUnit/Framework.php". in /usr/share/php/PHPUnit/Framework.php on line 50
Fatal error: Class 'PHPUnit_Runner_StandardTestSuiteLoader' not found in /usr/share/php/PHPUnit/TextUI/TestRunner.php on line 434
PHP Fatal error: Class 'PHPUnit_Runner_StandardTestSuiteLoader' not found in /usr/share/php/PHPUnit/TextUI/TestRunner.php on line 434
/var/www/nrka2/build/build.xml:30: exec returned: 255
BUILD FAILED (total time: 2 seconds)
Run Code Online (Sandbox Code Playgroud)
您好我在最新的phpUnit版本中遇到此错误.任何想法如何解决?
我是单元测试的新手,并编写了以下测试:
/**
* @expectedException Exception
*/
public function testCantGetInvalidCampsite() {
$invalidIds = array(300000, "string");
foreach($invalidIds as $id) {
$this->campsites->getCampsite($id); // will throw an exception
}
}
Run Code Online (Sandbox Code Playgroud)
我不确定这是否实际测试了所有无效的id,或者只是在它遇到第一个异常时就停止了.这是我应该如何测试多个异常,还是我需要将其拆分为多个不同的测试,还是我应该采用另一种方式?
此外,如果我的异常消息是动态生成的,例如"无法检索ID为30000的记录",如何测试是否正在生成正确的动态消息?
phpunit ×10
php ×7
unit-testing ×7
ant ×1
batch-file ×1
curl ×1
exception ×1
php-8.2 ×1
simpletest ×1
tdd ×1
type-hinting ×1
web-services ×1