标签: phpunit

使用PHPUnit模拟对象期望部分数组

在PHPUnit mock with()子句中测试多个数组键的最佳方法是什么?

例如,要测试方法是否调用第二个参数是包含'foo'键的数组:

$this->stubDispatcher->expects($this->once())
        ->method('send')
        ->with('className', $this->arrayHasKey('foo'));
Run Code Online (Sandbox Code Playgroud)

我想要做的是像$this->arrayHasKey('foo', 'bar')实际上没有匹配数组的确切内容.

php phpunit

9
推荐指数
2
解决办法
4832
查看次数

使用PHPUnit代码覆盖与接口

我正在使用PHPUnit(3.6.7)测试并在我的应用程序上提供代码覆盖率报告,所有内容都已设置并按预期工作.

除了我的接口之外,我完全覆盖了所有代码,即使我对实现接口的类进行了测试.该报告只是声明接口未执行

有没有办法覆盖界面?或者是告诉PHPUnit忽略代码覆盖的情况?

php phpunit unit-testing code-coverage

9
推荐指数
2
解决办法
2012
查看次数

临时Doctrine2灯具用于测试phpunit

我有一个基于Symfony2 + Doctrine2构建的应用程序,我想为(使用phpunit)创建一些测试.

例如,如果我想针对数据库中的记录测试唯一的验证器,我想创建一个我可以使用的记录,但是在测试之后我不再需要它了.那么有没有办法创建临时(或虚拟)灯具或我必须手动创建和删除它们?

testing phpunit fixtures symfony doctrine-orm

9
推荐指数
1
解决办法
8250
查看次数

PHPUnit和Globals

我正在学习和探索PHP 5.2.9的PHPUnit应用程序,并遇到了全局问题.我已将$ backupGlobals设置为FALSE,包括文档'@backupGlobals disabled',这似乎不会影响PHPUnit备份全局变量的行为.有什么我想念的吗?我需要更改PHPUnit的xml文件吗?创建一个引导程序?

config.php文件:

$testString = 'Hello world!';
Run Code Online (Sandbox Code Playgroud)

basicApp.php:

require ('D:\data\clients\security.ca\web_sites\QRASystems.com\wwwroot\__tests\BasicApp\config.php');

class BasicApp {

public $test;

public function __construct() {
    global $testString;
    $this->test = $testString;
}

public function getTest() {
    return $this->test;
}

public function setTest($test){
    $this->test = $test;
}
Run Code Online (Sandbox Code Playgroud)

BasicAppTest.php:

require ('D:\data\clients\security.ca\web_sites\QRASystems.com\wwwroot\__tests\BasicApp\BasicApp.php');

class BasicAppTest extends PHPUnit_Framework_TestCase{
    protected $testClass;
    protected $backupGlobals = FALSE;
    protected $backupGlobalsBlacklist = array('testString');

    public function SetUp(){
        $this->testClass = new BasicApp;
        $this->testClass->bootstrap();
    }

    public function testGlobal(){
        echo $this->testClass->getTest();
        $this->assertNotNull($this->backupGlobals);
        $this->assertFalse($this->backupGlobals);
        $this->assertNotEmpty($this->testClass->test);
    }

    public function testMethods(){
        $this->testClass->setTest('Goodbye …
Run Code Online (Sandbox Code Playgroud)

php phpunit globals

9
推荐指数
1
解决办法
8228
查看次数

如何针对PHP项目的三叶草覆盖调整Jenkins天气报告

我为Jenkins的一个新团队安装了一些PHP项目,我试图降低最初的期望,以帮助他们提高测试和一切.最初我们拍摄20%的代码覆盖率.我调整了我的PHPUnit配置文件中的边界,当它们达到20%时,代码覆盖率变为绿色 - 这样他们就可以看到它们朝着正确的方向发展.但我想要做的是更新我的jenkins视图中的天气报告以反映三叶草的覆盖范围,我似乎无法做到这一点!

詹金斯天气报告三叶草覆盖范围

我在我的jenkins项目配置中检查了Publish Clover PHP Coverage Report,我的clover.xml是从PHPUnit生成的,但我不知道如何调整这个边界.

从phpunit.xml.dist记录:

<logging>
  <log type="coverage-html" target="build/coverage" title="ERC"
     charset="UTF-8" yui="true" highlight="true"
     lowUpperBound="10" highLowerBound="20"/>
  <log type="coverage-clover" target="build/logs/clover.xml"/>
  <log type="junit" target="build/logs/junit.xml" logIncompleteSkipped="false"/>
</logging>
Run Code Online (Sandbox Code Playgroud)

项目设置覆盖率指标

我最初没有启用发布Html报告,但我发现在保存并重新运行构建后,启用它并修改百分比从未产生任何影响. 在此输入图像描述

continuous-integration phpunit code-coverage jenkins

9
推荐指数
1
解决办法
7159
查看次数

PHPUnit严格模式 - 如何更改默认超时

我想继续在严格模式下运行我的单元测试,使我所知道的任何特别长的测试很容易,但在同一时间1s的默认超时是不够的.我可以为所有测试更改它吗?我知道我可以使用@short / @medium / @long注释为每个类(和单个测试)设置超时,但是对于所有测试是否都有类似的东西?也许在phpunit.xml中?

这是为了避免PHP_Invoker_TimeoutException: Execution aborted after 1 second偶尔发生这种情况.

php phpunit timeout

9
推荐指数
2
解决办法
4133
查看次数

测试Symfony2 Forms导致无法加载类型"entity"

我正在测试为应用程序定义的表单类型I. 在测试表单类型期间,使用symfony的TypeTestCase类会出现消息"无法加载类型"实体"".我该怎么做才能解决问题?

class MyType extends AbstractType {
  public function buildForm(FormBuilderInterface $builder, array $options) {
    $builder->add('otherType', 'entity', array('class' => 'Bundle:OtherType'));
  }
}

class MyTypeTest extends TypeTestCase {
  public function testSth() {
    $type = new MyType();
  }
}
Run Code Online (Sandbox Code Playgroud)

forms testing phpunit symfony

9
推荐指数
1
解决办法
4618
查看次数

PHPUnit - 模拟S3Client不能正常工作

库:"aws/aws-sdk-php":"2.*"
PHP版本:PHP 5.4.24(cli)

composer.json

{
    "require": {
        "php": ">=5.3.1",
        "aws/aws-sdk-php": "2.*",
        ...
    },

    "require-dev": {
        "phpunit/phpunit": "4.1",
        "davedevelopment/phpmig": "*",
        "anahkiasen/rocketeer": "*"
    },
    ...
}
Run Code Online (Sandbox Code Playgroud)

我们已经制作了一个AwsWrapper来获取功能操作:uploadFile,deleteFile ...
你可以阅读这个类,依赖注入要进行单元测试.
专注于构造函数和内部$ this-> s3Client-> putObject(...)调用uploadFile函数.

<?php

namespace app\lib\modules\files;

use Aws\Common\Aws;
use Aws\S3\Exception\S3Exception;
use Aws\S3\S3Client;
use core\lib\exceptions\WSException;
use core\lib\Injector;
use core\lib\utils\System;

class AwsWrapper
{

  /**
   * @var \core\lib\Injector
   */
  private $injector;

  /**
   * @var S3Client
   */
  private $s3Client;

  /**
   * @var string
   */
  private $bucket;

  function __construct(Injector $injector = null, S3Client $s3 = null)
  { …
Run Code Online (Sandbox Code Playgroud)

php tdd phpunit mocking amazon-s3

9
推荐指数
1
解决办法
3836
查看次数

使用PHPUnit测试error_log

我有这个功能,我想测试看起来像这样:

class Logger {
  function error($msg){
    if (is_string($msg)){
      error_log($msg);
      die($msg);
    } elseif (is_object($msg)){
      error_log($msg.' '.$msg->getTraceAsString());
      die('exception');
    } else {
      var_dump($msg);
      die('error');
    }
  }
Run Code Online (Sandbox Code Playgroud)

我想测试这个功能而不记录$msg.有没有办法确定error_log没有记录是否有效?我尝试使用,setExpectedException但我无法捕获错误,它一直在记录.

php phpunit

9
推荐指数
1
解决办法
1567
查看次数

PHPUnit找不到"TestCase"类

要使用项目的PHPUnit运行我的测试,我执行以下操作:php vendor/bin/phpunit tests/SomeClassTest.php在下面的类声明中,它可以正常工作:

class SomeClassTest extends PHPUnit_Framework_TestCase {
  public function test_someMethod() {}
}
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时它失败了:

use PHPUnit\Framework\TestCase;

class SomeClassTest extends TestCase {
  public function test_someMethod() {}
}
Run Code Online (Sandbox Code Playgroud)

我明白了PHP Fatal error: Class 'PHPUnit\Framework\TestCase' not found......

php phpunit unit-testing

9
推荐指数
1
解决办法
1272
查看次数