标签: phpunit

如何在PHPUnit中捕获PHP警告

我正在编写测试用例,这是我的一个问题.

所以说我正在测试一个简单的函数 someClass::loadValue($value)

正常的测试用例很简单,但假设在传入null或-1时,函数调用会生成一个PHP警告,这被认为是一个错误.

问题是,如何编写我的PHPUnit测试用例,以便在函数正常处理null/-1时成功,并在抛出PHP警告时失败?

谢谢,

phpunit

19
推荐指数
4
解决办法
1万
查看次数

在PHPUnit中,在方法中使用type-hint创建接口的Mock对象失败

我创建了以下界面:

<?php
interface Action
{
    public function execute(\requests\Request $request, array $params);
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用PHPUnit 3.4创建此接口的Mock对象,但是我收到以下错误:

致命错误:Mock_Action_b389c0b1 :: execute()的声明必须与D:\ Xampp\xampp\php\PEAR\PHPUnit\Framework\TestCase.php(1121)中的Action :: execute()的声明兼容:eval()' d代码在第2行

我查看了从PHPUnit获得的堆栈跟踪,发现它创建了一个实现接口Action的Mock对象,但是以下列方式创建了execute方法:

<?php
public function execute($request, array $params)
Run Code Online (Sandbox Code Playgroud)

如您所见,PHPUnit接管数组类型提示,但忘记了\ requests\Request.这显然会导致错误.有谁知道这个错误的解决方法?

我也尝试过没有命名空间,但我仍然得到同样的错误.

php phpunit interface mocking

18
推荐指数
1
解决办法
4862
查看次数

如何表明PHPUnit测试预计会失败?

是否可以使用PHPUnit将测试标记为"预期失败"?这在执行TDD时很有用,并且您希望区分真正失败的测试和由于尚未编写相关代码而导致失败的测试.

php tdd phpunit unit-testing

18
推荐指数
3
解决办法
9205
查看次数

在正在测试的同一个类中模拟一个方法

我想在我正在测试的同一个类中模拟一个方法.

ClassA {
   function hardToTest($arg) {
      // difficult to test code
   }

   function underTest() {
      return $this->hardToTest('foo');
   }
}
Run Code Online (Sandbox Code Playgroud)

我以为我可以用反射来做这件事,但也许这只是我应该hardToTest进入另一个对象的一个标志.

php phpunit unit-testing mocking

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

PHPUnit:警告:require(PHPUnit/Autoload.php):无法打开流:第42行/ usr/local/bin/phpunit中没有这样的文件或目录

跑步的时候

  • PHPUnit的

我收到错误

Warning: require(PHPUnit/Autoload.php): failed to open stream: No such file or directory in /usr/local/bin/phpunit on line 42

Fatal error: require(): Failed opening required 'PHPUnit/Autoload.php' (include_path='.:') in /usr/local/bin/phpunit on line 42
Run Code Online (Sandbox Code Playgroud)

/ usr/local/bin/phpunit在第42行显示以下内容:

require 'PHPUnit/Autoload.php';
Run Code Online (Sandbox Code Playgroud)

任何建议如何解决这个问题?

更新(1):

我在/ etc /中缺少php.ini,所以我通过符号链接来阅读MAMP php.ini.现在我明白了

php -r 'foreach (explode(":", get_include_path()) as $path) echo $path . PHP_EOL;'
.
/Applications/MAMP/bin/php/php5.3.6/lib/php
/usr/local/bin/pear
/usr/local/share/pear/PHPUnit
Run Code Online (Sandbox Code Playgroud)

赛跑

  • PHPUnit的

正在运行但不提供输出.

有什么建议接下来要检查什么?

更新(2):

可能这个问题的根本原因与问题有关

phpunit mamp osx-lion

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

PHP为所有测试套件提供不同的bootstrap

<phpunit backupGlobals="false" colors="true">
    <testsuite name="app1" >
        <directory>./app1</directory>
    </testsuite>
    <testsuite name="app1" >
        <directory>./app2</directory>
    </testsuite>
</phpunit>
Run Code Online (Sandbox Code Playgroud)

我如何使第一和第二testuite加载不同的bootstraps?

php phpunit

18
推荐指数
3
解决办法
8160
查看次数

PhpStorm PHPUnit testreporter错误

我已经通过Composer安装了PHPUnit并将其设置为通过设置安装我的单元测试.

但是当我运行测试时,测试报告器会出现以下错误(tets执行得很好):

无法将测试报告者附加到测试框架或测试框架意外退出

php phpunit phpstorm

18
推荐指数
1
解决办法
6749
查看次数

PhpStorm PhpUnit通过phar自动完成无法正常工作

我有PHPStorm 8.0.1.

PHPUnit通过PHAR存档安装,如:

wget https://phar.phpunit.de/phpunit.phar
chmod +x phpunit.phar
sudo mv phpunit.phar /usr/bin/phpunit
Run Code Online (Sandbox Code Playgroud)

PHPUnit通过cli工作:

user@pc:/usr/bin$ cd ~
user@pc:~$ phpunit --version
PHPUnit 4.3.5 by Sebastian Bergmann.
Run Code Online (Sandbox Code Playgroud)

我按照JetBrains网站上的说明https://www.jetbrains.com/phpstorm/webhelp/enabling-phpunit-support.html#d298258e897

在PHPStorm文件 - >设置选项卡PHP/PHPUnit Path to phpunit.phar中选中单选按钮并将值设置为/usr/bin/phpunit

我有一个测试定义如下的文件:

class MyTest extends PHPUnit_Framework_TestCase {
...
Run Code Online (Sandbox Code Playgroud)

此时PHPStorm标志着 Undefined class PHPUnit_Framework_TestCase

我重新启动了PHPStorm和计算机,但仍然遇到了同样的问题.

我也尝试添加/usr/bin包含路径(右键单击项目视图中的外部库,并选择选项Configure PHP include paths)但没有成功.

这是PHPStorm设置的配置,选项卡PHP(如果重要):

PHP Language level: 5.5 (finally, generators, etc.)
Interpreter: PHP 5.5 (5.5.9-1ubuntu4.5)
Include path is empty
Run Code Online (Sandbox Code Playgroud)

phpunit autocomplete phpstorm

18
推荐指数
1
解决办法
7517
查看次数

测试重定向到外部站点的链接

我在/my/example/page链接到laravel路线的页面上有一个链接my.route.

路线

Route::group(['middleware' => ['auth']], function () {
    Route::group(['middleware' => ['Some\Custom\Auth\Middleware:1']], function () {
        Route::match(['GET', 'POST'], '/my/route/to/external/controller', 'exampleController@externalLink')->name('my.route');
    }
}    
Run Code Online (Sandbox Code Playgroud)

链接 /my/example/page

<a href="/my/route/to/external/controller">Link</a>
Run Code Online (Sandbox Code Playgroud)

此路由/my/route/to/external/controller指向控制器externalLink中的此控制器方法,该方法exampleController返回要使用的href的url

public function externalLink()
{
    return $this->redirect->away('www.externalsite.com');
}
Run Code Online (Sandbox Code Playgroud)

我的考试是

$this->visit(/my/example/page)
     ->click('Link')
     ->assertRedirectedToRoute('my.route');
Run Code Online (Sandbox Code Playgroud)

我不断得到错误

Symfony的\分量\ HttpKernel \异常\ NotFoundHttpException

当我使用click()测试方法.

我可以使用它,@expectedException但他没有帮助,因为我希望看到一个不同的页面.

我也试过(不在一起);

->assertResponseStatus(200);
->seePageIs('www.externalsite.com');
->assertRedirect();
->followRedirects();
Run Code Online (Sandbox Code Playgroud)

从浏览器检查,当点击网址时,我得到了

http://www.example.com/my/route/to/external      302
http://www.externalsite.com                      200
Run Code Online (Sandbox Code Playgroud)

如何在功能上测试被点击的按钮并重定向到外部站点?

testing phpunit laravel

18
推荐指数
1
解决办法
1411
查看次数

PHPUnit模拟对象的属性

我正在锁定一种模拟对象并填充其属性的方法.以下是使用另一个对象的属性的方法示例:

class MyClass {

    private $_object;

    public function methodUnderTest($object) {
        $this->_object = $object;
        return $this->_object->property
    }
}
Run Code Online (Sandbox Code Playgroud)

要单元测试这个方法我应该$objectgetMockBuilder()方法创建一个模拟PHPUnit.但我找不到一种方法来模拟属性$object,只是方法.

php phpunit unit-testing mocking mockery

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