标签: phpunit

如何使用过程代码库在PHP中编写单元测试?

我基本上相信单元测试的好处,我想开始将这个概念应用于用PHP编写的大型现有代码库.不到10%的代码是面向对象的.

我看了几个单元测试框架(PHPUnit,SimpleTest和phpt).但是,我没有找到测试过程代码的任何示例.什么是我的情况最好的框架,有没有使用非OOP代码单元测试PHP的例子?

php paradigms phpunit unit-testing simpletest

30
推荐指数
2
解决办法
6569
查看次数

PHPUnit - 通过命令行测试运行器运行特定的测试套件

是否可以通过命令行测试运行器指定从配置文件运行哪个测试套件?例如,如果我有以下xml配置:

<phpunit ...>
    <testsuites>
        <testsuite name="My Test Suite 1">
            <directory>./MyTestSuite1/</directory>
        </testsuite>
        <testsuite name="My Test Suite 2">
            <directory>./MyTestSuite2/</directory>
        </testsuite>
    </testsuites>
    ...
</phpunit>
Run Code Online (Sandbox Code Playgroud)

我可以只运行"我的测试套件1"吗?

php phpunit unit-testing

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

用于模拟由新类对象调用的方法的单元测试

我正在为现有代码编写单元测试,就像这样

class someClass {
    public function __construct() { ... }

    public function someFoo($var) {
        ...
        $var = "something";
        ...
        $model = new someClass();
        model->someOtherFoo($var);
    }

    public someOtherFoo($var){
         // some code which has to be mocked
    }
}
Run Code Online (Sandbox Code Playgroud)

我应该如何模拟对函数" someOtherFoo" 的调用,使其some code在内部不执行" " someOtherFoo

class someClassTest {
   public function someFoo() {
      $fixture = $this->getMock('someClass ', array('someOtherFoo'));
      $var = "something";
      ....
      // How to mock the call to someOtherFoo() here
   }

}
Run Code Online (Sandbox Code Playgroud)

是否可以模拟构造函数,以便它返回我自己构造的函数或变量?

谢谢

php phpunit mocking

30
推荐指数
2
解决办法
2万
查看次数

PHPUnit&Behat; 补充还是替代?

我一直在寻找SO和谷歌,但我无法得到明确的答案.

PHPUnit是一个单元测试框架,就像JUnit一样.我使用它,也结合Selenium扩展进行功能测试.浏览时,我看到Behat/Mink不断被提及.但我不完全理解Behat在这里的适用方式.

使用Behat,您可以用人类可读的格式编写场景.然后,Behat可以将其转换为新项目的骨架类吗?但它是否也为单元测试提供了骨架类?你是使用Behat编写单元测试,还是使用PHPUnit/SimpleTest?

但是Behat/Mink确实取代了PHPUnit_Selenium-extension进行功能测试?

您是仅将Behat用于新项目,还是可以适应现有项目?

php bdd phpunit behat mink

30
推荐指数
3
解决办法
1万
查看次数

PHPUnit断言没有调用任何方法

我有一个使用ServiceB的ClassA.在某种情况下,ClassA最终不应该调用任何ServiceB方法.我现在想测试这个并且确实没有确实调用任何方法.

这可以按如下方式完成:

$classA->expects( $this->never() )->method( 'first_method' );
$classA->expects( $this->never() )->method( 'second_method' );
...
Run Code Online (Sandbox Code Playgroud)

有没有办法简单地说"不应该在这个对象上调用方法"而不是必须为每个方法指定一个限制?

php testing phpunit unit-testing mocking

30
推荐指数
1
解决办法
8935
查看次数

无法在PHPStorm的IDE中运行单元测试

当我运行vendor/bin/phpunit我的测试时,所有运行成功.但是,当我右键单击测试文件并单击"运行测试"时,我最终看到:

/usr/local/bin/php -dxdebug.coverage_enable=1 /private/var/folders/bj/t2w187x158g7rgghctgknwb80000gn/T/ide-phpunit.php --coverage-clover /Users/bkuhl/Library/Caches/WebIde70/coverage/services$tests.coverage --no-configuration /Users/bkuhl/Projects/myproject/services/app/tests
Testing started at 3:09 PM ...

Fatal error: Class IDE_PHPUnit_Framework_TestListener contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (PHPUnit_Framework_TestListener::addRiskyTest) in /private/var/folders/bj/t2w187x158g7rgghctgknwb80000gn/T/ide-phpunit.php on line 504
PHP Fatal error:  Class IDE_PHPUnit_Framework_TestListener contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (PHPUnit_Framework_TestListener::addRiskyTest) in /private/var/folders/bj/t2w187x158g7rgghctgknwb80000gn/T/ide-phpunit.php on line 504
Call Stack:
    0.0008     340040   1. {main}() /private/var/folders/bj/t2w187x158g7rgghctgknwb80000gn/T/ide-phpunit.php:0

PHP Stack trace:
PHP   1. {main}() …
Run Code Online (Sandbox Code Playgroud)

php phpunit unit-testing phpstorm composer-php

30
推荐指数
3
解决办法
1万
查看次数

PHPUnit的.错误:没有可用的代码覆盖率驱动程序.(已安装xdebug)

对于类似问题Laravel 5有一个答案:PHPUnit并没有可用的代码覆盖驱动程序,但我安装了xdebug.

(如果我正在使用这个问题:windows7,netbeans8.1,php7,wamp3)

在Netbeans中显示代码覆盖率会导致:

错误:没有可用的代码覆盖率驱动程序

,输出如下:

"C:\ wamp\www\treningPHPUnitSymfony2.8\bin\phpunit.bat"" - colors"" - log-junit""C:\ Users\chiny\AppData\Local\Temp \nb-phpunit-log. xml""--coverage-clover""C:\ Users\chiny\AppData\Local\Temp \nb-phpunit-coverage.xml""C:\ Program Files\NetBeans 8.1\php\phpunit\NetBeansSuite.php"" - ""--run = C:\ wamp\www\treningPHPUnitSymfony2.8\src\TreningBundle\Tests\Controller\RabarbarControllerTest.php"由Sebastian Bergmann和贡献者提供的PHPUnit 5.3.4.

错误:没有可用的代码覆盖率驱动程序

.II 3/3(100%)

时间:1.13秒,内存:4.00MB

好的,但不完整,跳过或有风险的测试!测试:3,断言:1,不完整:2.完成.](网址)

xdebug conf(C:\ wamp\bin\apache\apache2.4.17\bin\php.ini):

[xdebug]
zend_extension ="C:/wamp/bin/php/php7.0.1/zend_ext/php_xdebug-2.4.0rc3-7.0-vc14.dll"

xdebug.remote_enable = off
xdebug.profiler_enable = off
xdebug.profiler_enable_trigger = Off
xdebug.profiler_output_name = cachegrind.out.%t.%p
xdebug.profiler_output_dir ="C:/wamp/tmp"
xdebug.show_local_vars=0
Run Code Online (Sandbox Code Playgroud)

加载扩展 WAMP. 加载扩展

(我在同一个Windows分区中有netbeans和项目目录)

php phpunit wamp

30
推荐指数
3
解决办法
4万
查看次数

替换 PHPUnit 方法 `withConsecutive` (在 PHPUnit 10 中废弃)

由于该方法withConsecutive将在 PHPUnit 10 中被删除(在 9.6 中已弃用),我需要将此方法的所有出现替换为新代码。

尝试寻找一些解决方案,但没有找到任何合理的解决方案。

例如,我有一个代码

    $this->personServiceMock->expects($this->exactly(2))
        ->method('prepare')
        ->withConsecutive(
            [$personFirst, $employeeFirst],
            [$personSecond, $employeeSecond],
        )
        ->willReturnOnConsecutiveCalls($personDTO, $personSecondDTO);
Run Code Online (Sandbox Code Playgroud)

我应该替换哪个代码withConsecutive

PS官方网站上的文档仍然显示了如何使用withConsecutive

testing phpunit deprecated

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

是否有可能使用PHPUnit模拟对象期望调用magic __call()方法?

我在测试中有一个模拟对象.现实对象,PageRepository,实现了使用__call()魔术方法,所以如果你调用$ pageRepository-> findOneByXXXX($ value_of_field_XXXX),它会在数据库中搜索该参数匹配的记录.

有没有办法模拟这种方法?

真正的方法调用看起来像这样:

$homepage = $pageRepository->findOneBySlug('homepage');
Run Code Online (Sandbox Code Playgroud)

测试看起来像这样:

$mockPageRepository->expects($this->any())
    ->method('findOneBySlug')
    ->will($this->returnValue(new Page()));
Run Code Online (Sandbox Code Playgroud)

但它不起作用 - PHPUnit没有发现方法调用.让它看到方法的唯一方法是在PageRepository中显式定义方法.

php phpunit magic-methods symfony

29
推荐指数
2
解决办法
7420
查看次数

如何确定PHPUnit测试是否正在运行?

我目前有一个问题,我必须在遗留代码中解决,以使我们与PHP扩展的交互正常工作(Singleton测试问题).

因此,我不想在使用应用程序运行常规生产代码时执行此代码.因此,如果正在执行的代码作为测试的一部分执行,我需要检查常规PHP代码.

关于如何确定这个的任何建议?我想到了一个与测试文件本身存在相关的定义变量(我们不会将测试发送给客户),但是我们的开发人员需要Extension才能正常工作,而CI服务器需要运行测试.

是否建议在PHPUnit.xml文件中设置Global?其他想法?

phpunit

28
推荐指数
5
解决办法
8216
查看次数