标签: phpunit

PHP 和 PHPUnit:如何调用参数类型错误的方法(或函数)然后成功?

我想测试(使用 PHPUnit)一个包含 foreach 循环的方法。我想要完整的路径覆盖。原始代码有点太复杂,所以我在下面创建了一个最小的示例来说明我的问题。foreachPHP中的循环有3种情况。(我使用 PHP 8.2。)

\n
    \n
  1. 空可迭代的东西。
  2. \n
  3. 不是空的可迭代的东西。
  4. \n
  5. 不可迭代的东西。
  6. \n
\n
    public function dodo(array $a)\n    {\n        foreach ($a as $one) {\n            return $one;\n        }\n\n        return null;\n    }\n
Run 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\n
Run Code Online (Sandbox Code Playgroud)\n

我不想\xe2\x80\x99 不想从方法定义中删除或更改类型。这会使代码的可读性降低一些。有办法解决吗?如何编写一个涵盖 foreach 循环的所有情况的测试?

\n

换句话说:\n我如何使用dodo错误类型的参数调用?我想编写具有非常高的代码路径覆盖率的测试。

\n

php phpunit type-hinting php-8.2

3
推荐指数
2
解决办法
471
查看次数

自动测试生成?

目前我正在为报告功能编写测试,项目获得的功能越多,需要编写更多报告

在我的案例报告中得到一些"搜索"参数和限制,如行数等

现在我的问题:任何人都知道如何使用phpunit为一个具有众所周知的可能参数的函数自动生成测试用例?

我读了一些像其他语言的快速检查工具,但是为PHP存在自动测试生成吗?或者有人建议如何自动创建测试?

谢谢

php phpunit unit-testing code-generation

2
推荐指数
1
解决办法
3534
查看次数

"暂停"被忽略了

我读过我必须能够使用一个命令在我的站点中运行所有单元测试,所以我创建了一个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 automated-tests unit-testing batch-file

2
推荐指数
1
解决办法
2694
查看次数

单元测试类 - 抛出错误是不可能的?

我正在围绕PHPUnit,并试图为现有的类构建一个测试用例.

该类是一个静态配置类,用于获取,设置和列出应用程序中可用的配置选项.

这个班级非常严格.如果我尝试使用不兼容的值设置配置设置,或者配置设置不存在,E_USER_ERROR则抛出a,停止执行脚本.即使它不是错误处理的艺术,它也适用于本课程的目的.该类中的错误始终是编程错误的结果,而不是用户输入错误.

这具有很大的优势,您无需担心如何处理或记录错误消息,从而使代码保持苗条.输出消息(或不在生产中),die(),完成.

但是,使用单元测试,我看不出如何继续使用经典的PHP错误.我将不得不将函数转换为返回成功标志,或抛出异常.

我对么?

或者PHPUnit中是否有一种方法可以预期错误,因为有预期的异常?我马上看不到任何东西.

php tdd phpunit unit-testing

2
推荐指数
1
解决办法
649
查看次数

Zend_Test_PHPUnit_ControllerTestCase:测试视图参数而不是渲染输出

我正在使用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 unit-testing zend-framework

2
推荐指数
1
解决办法
914
查看次数

我为什么要在PHP中使用测试框架?

我最近听到很多人争论使用PHP测试功能,如PHPunit和SimpleTest以及他们选择的IDE(Eclipse for me).在谷歌搜索主题后,我仍然很难理解使用这些测试框架来加速开发的利弊.

如果有人能够在更基本的层面上为我解释这一点,我会非常感激.我正在使用PHP5作为通知.

非常感谢!

php phpunit unit-testing simpletest

2
推荐指数
1
解决办法
217
查看次数

PHPUnit与Zend Framework

我已经使用Zend Framework研究了PHPUnit的一些示例,但有一部分我不理解.

在大多数示例中,Application Bootstrap从setUp()Method中的某种baseClass运行.

为什么不__construct()呢?有什么好理由吗?

我正在谈论的例子

php phpunit zend-framework

2
推荐指数
1
解决办法
1058
查看次数

从不同服务器上的php代码调用php代码

情况如下.我的计算机上有一个本地(开发)PHP服务器(Win + IIS),我想在远程服务器上调用一个函数,因为远程服务器(linux)上有一个不能在我的本地计算机上运行的可执行文件.
所以在远程服务器上将是一个简单的PHP页面,它使用给定的参数调用可执行文件并返回结果.
我可以想象从javascript到这个远程PHP页面进行ajax调用,但在我的情况下,我在本地使用PHPUnit,有时我需要为特定数据(可执行文件提供)调用此远程页面.
所以我的问题是 - 如何从PHP(本地)到PHP(远程)进行调用?网络服务是可行的方式还是可以更简单地完成?

php phpunit curl web-services

2
推荐指数
1
解决办法
8807
查看次数

PHPUnit本身的错误

    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版本中遇到此错误.任何想法如何解决?

ant phpunit unit-testing zend-framework

2
推荐指数
1
解决办法
1933
查看次数

使用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 unit-testing exception

2
推荐指数
1
解决办法
1380
查看次数