标签: phpunit

从数据文件动态创建PHPUnit测试

我有一个包含输入和预期输出的数据文件.一个例子可能是:

input:   output:
2        3
3        5
4        Exception
5        8
...      ...
Run Code Online (Sandbox Code Playgroud)

目前,我有一个自定义解决方案,可以从数据文件中读取并对每个{input,output}对执行测试.我想将其转换为基于PHPUnit的解决方案,我希望每个输入使用测试名称forXassertY进行一次测试.所以前三个测试将被称为for2assert3(),for3assert5()和for4assertException().

如果可以动态创建测试方法并将数据文件作为这些测试的基础,我不想将现有数据转换为测试.我想将它转换为PHPUnit,因为我想稍后添加一些其他测试,并使用Hudson处理和查看输出.

建议?

php phpunit

7
推荐指数
2
解决办法
2969
查看次数

使用phpunit/selenium保持selenium浏览器打开

当测试失败时,运行selenium测试的浏览器将关闭.这在尝试调试时无益.我知道我可以选择在失败的情况下进行屏幕截图,但如果没有完整的上下文,这将无济于事.浏览器仍然可用,我可以回击并检查发生了什么.

是否有一种方法可以保持浏览器打开,即使断言失败或找不到元素?

selenium phpunit

7
推荐指数
1
解决办法
5295
查看次数

在phpunit中连接约束

我的问题是,我如何连接phpunit的clausule中的约束?在虚拟示例中:

$test->expects ($this->once())
     ->method ('increaseValue')
     ->with ($this->greaterThan (0)
     ->will ($this->returnValue (null));
Run Code Online (Sandbox Code Playgroud)

方法increaseValue的参数必须大于0,但如果我需要评估此参数必须小于10.

我如何连接$this->lessThan(10)

php phpunit

7
推荐指数
1
解决办法
1586
查看次数

phpunit模拟全面的文档

有什么是模拟以及如何使用它们的描述:http://www.phpunit.de/manual/current/en/test-doubles.html

但所有可能的方法,如不全面的解释$this->any(),$this->once(),$this->equalTo()

所以我正在寻找Mock生成API

PS:是的,我知道我可以在消息来源中查看它,但我正在寻找一个在线API文档

php phpunit

7
推荐指数
1
解决办法
1682
查看次数

Netbeans-PHPUnit"没有执行测试"错误

我是任何一种测试的新手.我刚刚使用这个doc安装了pear和PHPUnit .我使用netbeans 7.3.1.我还安装了skeletongenerator运行此命令:pear install phpunit/PHPUnit_SkeletonGenerator.

按照PHPUnit中的测试中列出的步骤将PHPUnit集成到netbeans中.
Installing PHPUnit该文档部分所述,通过单击我的netbeans search下的按钮可Netbeans->preferences->unit testing识别PHPUnit安装.

我按照所有步骤添加了示例Calculator项目并生成了测试类.我做到了 但是当我通过右键单击Calculator.php文件并选择Test我得到以下结果来运行测试时.

在此输入图像描述

输出窗口没有任何用处:

在此输入图像描述

我不知道可能是什么问题以及如何解决这个问题.

很少有怀疑,认为可能是造成上述问题:
我应该加入Global include pathNetbeans->preferences->general
我需要require_once在Calculator.php文件中添加语句吗?
我是否只需要在某个特定文件夹下创建php项目,或者我放置项目的位置是不重要的?
如何检查PHPUnit是否已正确安装并且正在运行?

还有许多其他症状我甚至无法想到.

谢谢.

php pear phpunit netbeans netbeans-7.3

7
推荐指数
1
解决办法
4831
查看次数

如何在Laravel 4.1中对auth过滤器进行单元测试?

我想写一个单元测试,应该检查未经身份验证的用户是否可以查看用户列表(他不应该这样做).

我的路线

Route::group(array('prefix' => 'admin'), function() {
    Route::get('login', function() {
        return View::make('auth.login');
    });
    Route::post('login', function() {
        Auth::attempt( array('email' => Input::get('email'), 'password' => Input::get('password')) );
        return Redirect::intended('admin');
    });
    Route::get('logout', 'AuthController@logout');

    Route::group(array('before' => 'auth'), function() {
        Route::get('/', function() {
            return Redirect::to('admin/users');
        });
        Route::resource('users', 'UsersController');
    });
});
Run Code Online (Sandbox Code Playgroud)

我的考试

public function testUnauthenticatedUserIndexAccess() {
    $response = $this->call('GET', 'admin/users');

    $this->assertRedirectedTo('admin/login');
}
Run Code Online (Sandbox Code Playgroud)

我的过滤器

Route::filter('auth', function() {
    if (Auth::guest()) return Redirect::guest('admin/login');
});
Run Code Online (Sandbox Code Playgroud)

结果

声明Illuminate\Http\Response Object(...)是类"Illuminate\Http\RedirectResponse"的实例失败.

如果我从测试中记录$ response,它会显示完整的用户列表,就像管理员在测试期间登录一样.

如果我使用浏览器浏览管理员/用户而没有登录我被重定向到像我应该登录,所以auth过滤器确实在工作.

问题

  1. Laravel中是否存在默认情况下在测试期间登录第一个用户的内容?或者Auth :: guest()在测试期间默认为false?
  2. 如果是这样,我如何在单元测试期间"退出"?我试过$ this-> be(null)但是得到一个错误,说传递的对象必须实现UserInterface.

phpunit unit-testing laravel laravel-4

7
推荐指数
1
解决办法
4252
查看次数

PHP:如何断言数组包含某个值?

我正在使用phpunit编写一些单元测试,现在我想断言一个数组包含一个特定的值,但我能找到的唯一函数是assertArrayHasKey().没有任何assertArrayHasValue.

所以要明确我想要这样的东西:

$a = [5, 8, 16];
assertArrayHasValue(8, $a);
Run Code Online (Sandbox Code Playgroud)

欢迎所有提示!

php phpunit unit-testing assert

7
推荐指数
1
解决办法
3566
查看次数

使用特定的php版本在phpunit中运行测试

我在我的Mac上安装了多个PHP版本,并希望针对特定的PHP版本(或针对​​多个版本)运行单元测试

这是我的php版本:

$ php --version
  Output: PHP 5.4.23 ...

$ /Applications/MAMP/bin/php/php5.2.17/bin/php --version
  Output: PHP 5.2.17 ...
Run Code Online (Sandbox Code Playgroud)

我的测试用例如下:

function test_php_version() {
    $actual = phpversion();
    $expected = '5.2.17';
    $this->assertEquals( $expected, $actual, 'Wrong PHP version!' );
}
Run Code Online (Sandbox Code Playgroud)

当我运行测试时,我收到了这个回复:

$ phpunit

  Wrong PHP version!
  Failed asserting that two strings are equal.
  --- Expected
  +++ Actual
  @@ @@
  -'5.2.17'
  +'5.4.24'

$ /Applications/MAMP/bin/php/php5.2.17/bin/php phpunit
  Error: Could not open input file: phpunit
Run Code Online (Sandbox Code Playgroud)

如何使用php 5.2.7版运行测试?


更新:

我发现PHPUnit不再运行php5.2.17了.所以我改变了我的要求,用php5.3.5运行单元测试,这是支持的.

php macos phpunit version

7
推荐指数
2
解决办法
4689
查看次数

测试Laravel包

所以,我正在编写一个基本的Laravel软件包,而且我似乎偶然发现了另一个问题,这次是测试.

开发中的包当前位于packages项目根目录中的文件夹中.我修改了composer.json包的文件以包含我需要的依赖项

"require-dev": {
    "phpunit/phpunit": "~4.0",
    "laravel/laravel": "dev-develop"
}
Run Code Online (Sandbox Code Playgroud)

但是,每当我尝试phpunit tests在包文件夹(包含一个以tests样本测试命名的文件夹)中运行时,我都会收到以下错误:

PHP致命错误:第8行的/workspace/laravel/packages/sample/http-request/tests/HttpRequestTest.php中找不到类'Illuminate\Foundation\Testing\TestCase'

测试文件只是自动生成的存根:

<?php

use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;

class HttpRequestTest extends Illuminate\Foundation\Testing\TestCase
{
    /**
     * A basic test example.
     *
     * @return void
     */
    public function testExample()
    {
        $this->assertTrue(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

知道为什么这不起作用吗?应用程序测试顺利运行,但应用程序本身没有除框中内容之外的依赖项.

通过扩展PHPUnit_Framework_TestCase来管理以使其独立工作:

class HttpRequestTest extends PHPUnit_Framework_TestCase 
Run Code Online (Sandbox Code Playgroud)

但是,运行它像:

vendor/bin/phpunit packages/yourname/package-name/
Run Code Online (Sandbox Code Playgroud)

也适用,所以我选择它作为答案.

php phpunit unit-testing laravel

7
推荐指数
1
解决办法
3144
查看次数

PhpStorm"测试框架意外退出"

我正在尝试在PhpStorm中设置PHPUnit测试.

设置>语言和框架> PHP> PHPUnit中,我选择使用Composer自动加载来加载PHPUnit.

在我写的脚本路径中<path to project>/vendor/bin/phpunit.

当我运行测试套件时,我收到错误消息:

测试框架意外退出

php phpunit phpstorm

7
推荐指数
1
解决办法
3792
查看次数