我有一个包含输入和预期输出的数据文件.一个例子可能是:
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处理和查看输出.
建议?
当测试失败时,运行selenium测试的浏览器将关闭.这在尝试调试时无益.我知道我可以选择在失败的情况下进行屏幕截图,但如果没有完整的上下文,这将无济于事.浏览器仍然可用,我可以回击并检查发生了什么.
是否有一种方法可以保持浏览器打开,即使断言失败或找不到元素?
我的问题是,我如何连接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)?
有什么是模拟以及如何使用它们的描述:http://www.phpunit.de/manual/current/en/test-doubles.html
但所有可能的方法,如不全面的解释$this->any(),$this->once(),$this->equalTo()等
所以我正在寻找Mock生成API
PS:是的,我知道我可以在消息来源中查看它,但我正在寻找一个在线API文档
我是任何一种测试的新手.我刚刚使用这个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 path下Netbeans->preferences->general?
我需要require_once在Calculator.php文件中添加语句吗?
我是否只需要在某个特定文件夹下创建php项目,或者我放置项目的位置是不重要的?
如何检查PHPUnit是否已正确安装并且正在运行?
还有许多其他症状我甚至无法想到.
谢谢.
我想写一个单元测试,应该检查未经身份验证的用户是否可以查看用户列表(他不应该这样做).
我的路线
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过滤器确实在工作.
问题
我正在使用phpunit编写一些单元测试,现在我想断言一个数组包含一个特定的值,但我能找到的唯一函数是assertArrayHasKey().没有任何assertArrayHasValue.
所以要明确我想要这样的东西:
$a = [5, 8, 16];
assertArrayHasValue(8, $a);
Run Code Online (Sandbox Code Playgroud)
欢迎所有提示!
我在我的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运行单元测试,这是支持的.
所以,我正在编写一个基本的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)
也适用,所以我选择它作为答案.
我正在尝试在PhpStorm中设置PHPUnit测试.
在设置>语言和框架> PHP> PHPUnit中,我选择使用Composer自动加载来加载PHPUnit.
在我写的脚本路径中<path to project>/vendor/bin/phpunit.
当我运行测试套件时,我收到错误消息:
测试框架意外退出