phpunit(phpunit远程代码执行漏洞)

软件教程 2022.10.16 176

目录:

怎样在composer编写phpunit

1、创建 composer.json 文件加上一个对 phpunit/phpunit 的依赖关系

,这里只定义了一个对 PHPUnit 4.6 的开发时(development-time)依赖。

2、通过 Composer 完成系统级的安装,可以运行:

php composer.phar global require 'phpunit/phpunit=4.6.*'

请确保 path 变量中包含有 ~/.composer/vendor/bin/。

可选的组件包

有以下可选组件包可用:

PHP_Invoker

一个工具类,可以用带有超时限制的方式调用可调用内容。当需要在严格模式下保证测试的超时限制时,这个组件包是必须的。

PHPUnit 的 PHAR 分发中已经包含了此组件包。若要通过 Composer 安装此组件包,添加如下 "require-dev" 依赖项:

"phpunit/php-invoker": "*"

curl phpunit怎么安装配置 phpstorm

1。安装php5.6,phpunit5.1,curl

2。下载phpunit.phar文件,然后在phpstorm 中加载,如图

第二个就是phpunit.phar的路径

3.。加载phpunit安装目录:

4.。选择编译器

5,根据curl 模拟访问接口,

PHPUnit模拟对象的静态方法问题,怎么解决

当我们对A类进行单元测试时,A类可能依赖了B类,为了减少依赖,方便A类方法的测试,我们可以模拟一个B类,简单规定其各方法的返回值(而非真正实现具体逻辑)。Phpunit中提供了一套模拟类的api,简单使用如下:

[php] view

plaincopyprint?

class StubTest extends PHPUnit_Framework_TestCase

{

public function testStub()

{

// Create a stub for the SomeClass class.

$stub = $this-getMock('SomeClass');

// Configure the stub.

$stub-expects($this-any())

-method('doSomething')

-will($this-returnValue('foo'));

// Calling $stub-doSomething() will now return

// 'foo'.

$this-assertEquals('foo', $stub-doSomething());

}

}

class StubTest extends PHPUnit_Framework_TestCase

{

public function testStub()

{

// Create a stub for the SomeClass class.

$stub = $this-getMock('SomeClass');

// Configure the stub.

$stub-expects($this-any())

-method('doSomething')

-will($this-returnValue('foo'));

// Calling $stub-doSomething() will now return

// 'foo'.

$this-assertEquals('foo', $stub-doSomething());

}

}

在这个例子中,我们得到了一个'SomeClass'的模拟,规定其可以被调用任意次,如果调用doSomething方法,将得到值foo。

问题:

我们知道,对于一个单例类,其constructor方法为private,而getMock的实现,默认是要调用原类的constructor方法。

如果SomeClass为单例,phpunit将会提示

Call to private SomeClass::__construct() from context 'PHPUnit_Framework_TestCase'

这时,我们的测试该如何进行呢?

解决:

仍然使用getMock进行模拟。

只要将其第5个参数设为false即可。其含意是:不调用原对象的构造函数。

[php] view

plaincopyprint?

$stub = $this-getMock('SomeClass', array(), array(), '', false);

$stub = $this-getMock('SomeClass', array(), array(), '', false);

不得不说,这样使用有点复杂。

如果你使用的是phpunit3.5及以上版本提供了更易用的api,你可以这样禁掉对原有constructor方法的调用。

$stub=$this-getMockBuilder('SomeClass')-disableOriginalConstructor()-getMock();

附:

对getMock的6个可选参数的详解,

手册中并未提及它们的默认值,经测试得到结果如下:

array(), array(), '', false, false, false

$stub=$this-getMockBuilder('SomeClass')

等同于:

$stub=$this-getMockBuilder('SomeClass',array(), array(), '', true, false, false)

怎样在命令行执行phpunit

 因为phpunit要通过pear安装,所以首先要安装pear

找到php的目录下有一个Go-pear.bat,双击运行,提示你安装系统级别的还是一个本地拷贝,直接回车,定制安装目录,选择默认即可,直接回车。程序会自动从网站上下载所需要的文件,过一会就提示你安装好了。

安装好pear后,在php的目录下发现有一个pear.bat,这个是pear安装包用的程序,

在命令行进行php目录,输入 pear install phpunit2

即可,安装完成。

在php目录下会生成一个phpunit.bat,这个是命令行下的测试命令。

我们可以把他复制到我们要测试程序的目录下面。

在命令行下输入 phpunit sampleTest

就是对sampleTest这个case进行测试了。

有二点需要注意的地方:

phpunit需要pear的benchmark包,所以要安装 pear install benchmark即可。

在windows下安装完成后还不能直接进行测试,运行测试程序时会出现 'php'不是内部或外部命令,也不是可运行的程序。的错误,经我一路跟踪,最后在PHPUnit2/Util/Fileloader.php这个文件里找到了问题所在,这个文件是载入测试文件用的,同时使用php解释器进行了语法检查,shell_exec('php -l ' . escapeshellarg($filename));,而我的php.exe并没有在系统的path中,所以出现了上述问题,一种办法是将$output到include之前的代码全部注释掉,这样就不用语法检查了,还有一种办法就是在系统path中加入php的安装目录。

本文转载自互联网,如有侵权,联系删除

相关推荐