在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')实际上没有匹配数组的确切内容.
我正在使用PHPUnit(3.6.7)测试并在我的应用程序上提供代码覆盖率报告,所有内容都已设置并按预期工作.
除了我的接口之外,我完全覆盖了所有代码,即使我对实现接口的类进行了测试.该报告只是声明接口未执行
有没有办法覆盖界面?或者是告诉PHPUnit忽略代码覆盖的情况?
我有一个基于Symfony2 + Doctrine2构建的应用程序,我想为(使用phpunit)创建一些测试.
例如,如果我想针对数据库中的记录测试唯一的验证器,我想创建一个我可以使用的记录,但是在测试之后我不再需要它了.那么有没有办法创建临时(或虚拟)灯具或我必须手动创建和删除它们?
我正在学习和探索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) 我为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报告,但我发现在保存并重新运行构建后,启用它并修改百分比从未产生任何影响.

我想继续在严格模式下运行我的单元测试,使我所知道的任何特别长的测试很容易,但在同一时间1s的默认超时是不够的.我可以为所有测试更改它吗?我知道我可以使用@short / @medium / @long注释为每个类(和单个测试)设置超时,但是对于所有测试是否都有类似的东西?也许在phpunit.xml中?
这是为了避免PHP_Invoker_TimeoutException: Execution aborted after 1 second偶尔发生这种情况.
我正在测试为应用程序定义的表单类型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) 库:"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) 我有这个功能,我想测试看起来像这样:
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但我无法捕获错误,它一直在记录.
要使用项目的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......