可能重复:
通过PEAR安装PHPUnit
phpunit的安装说明正在运行:
pear channel-discover pear.phpunit.de
pear install phpunit/PHPUnit
Run Code Online (Sandbox Code Playgroud)
第一个没关系,第二个我得到一个错误:
phpunit/PHPUnit requires PEAR Installer (version >= 1.8.1), installed version is 1.7.2
phpunit/PHPUnit can optionally use package "pear/Image_GraphViz" (version >= 1.2.1)
phpunit/PHPUnit can optionally use package "pear/Log"
phpunit/PHPUnit can optionally use PHP extension "xdebug" (version >= 2.0.5)
No valid packages found
install failed
Run Code Online (Sandbox Code Playgroud)
我刚刚使用来自php.net(php 5.3.0)的最新go-pear.phar版本安装了梨,也尝试运行php go-pear.php梨网站说.
运行pear -V给我版本1.7.2,当我运行pear upgrade PEAR它说我的版本比当前noe 1.9.0更新,如果运行pear upgrade -f PEAR强制升级,它下载文件并成功安装但我仍然有1.7.2和版本无法安装phpunit.
我正在运行windows vista,php 5.3.0
我正在和Kohana一起开始使用PHPUnit.我的应用程序有许多控制器,它只是从某种形式获取数据,验证和插入/更新/删除到/ - /从数据库.我应该如何为此编写测试用例.
我知道如果我想测试一个函数,我会编写数据提供程序函数,只是将返回值与预期函数进行比较.但我的输入数据(来自表单的数据)正在$_POST变量中传递.我该怎么测试呢?之后,我应该检查插入的数据是否真的在数据库中?请给出我对这类测试的一些指导或链接到一些示例/教程.谢谢.
我想知道是否有一种相当简洁的方法来模拟支持方法链接的对象...例如,数据库查询对象可能有一个如下所示的方法调用:
$result = $database->select('my_table')->where(array('my_field'=>'a_value'))->limit(1)->execute();
Run Code Online (Sandbox Code Playgroud)
如果我必须模拟两个不同的选择查询,以便它们返回不同的结果,则会出现问题.有任何想法吗?
这是关于PHPUnit的,但其他单元测试框架的经验将有所帮助.
我正在测试一个返回另一个类的实例的对象.在内部,该类调用require_once.但是,当我尝试检查返回的对象是否属于该类型时,我收到以下消息:
InvalidArgumentException: Argument #1 of PHPUnit_Framework_Assert::assertInstanceOf() must be a class or interface name
Run Code Online (Sandbox Code Playgroud)
一旦我require_once在测试之前再次呼叫,此消息就会消失assertInstanceOf.这似乎不对.似乎PHPUnit应该足够聪明,知道该类已经加载,所以我不应该再次加载它.我在想这个错吗?我的PHPUnit配置错了吗?有没有办法避免在我的测试中再次要求这门课程?
当PHPUnit断言失败时,我不需要下面的堆栈跟踪,只是我的自定义消息("Type: R Expected: 333.33333333333 Actual: 345")和PHPUnit的失败消息("Failed assert that false is true").
除了将所有测试放在try/catch块中并在显示之前从异常消息中剥离堆栈跟踪之外,还有其他方法吗?
我不希望堆栈跟踪消除除PHPUnit_Framework_ExpectationFailedException之外的任何异常,但是如果这不可能,我可以处理在所有PHPUnit测试期间丢失堆栈跟踪.
SO上的其他帖子似乎提出了相反问题的解决方案,当xdebug将其关闭时,将堆栈跟踪恢复.
PHPUnit_Framework_ExpectationFailedException : Type: R Expected: 333.33333333333 Actual: 345
Failed asserting that false is true.
#0 /usr/share/php/PHPUnit/Framework/Constraint.php(91): PHPUnit_Framework_Constraint->fail(false, 'Type: R Expecte...')
#1 /usr/share/php/PHPUnit/Framework/Assert.php(2134): PHPUnit_Framework_Constraint->evaluate(false, 'Type: R Expecte...')
#2 /usr/share/php/PHPUnit/Framework/Assert.php(888): PHPUnit_Framework_Assert::assertThat(false, Object(PHPUnit_Framework_Constraint_IsTrue), 'Type: R Expecte...')
#3 /home/simon/Development/golfants/website/unit_tests/PostTest.php(33): PHPUnit_Framework_Assert::assertTrue(false, 'Type: R Expecte...')
#4 [internal function]: PostTest->testRandomAntTypeSelected()
#5 /usr/share/php/PHPUnit/Framework/TestCase.php(976): ReflectionMethod->invokeArgs(Object(PostTest), Array)
#6 /usr/share/php/PHPUnit/Framework/TestCase.php(831): PHPUnit_Framework_TestCase->runTest()
#7 /usr/share/php/PHPUnit/Framework/TestResult.php(648): PHPUnit_Framework_TestCase->runBare()
#8 /usr/share/php/PHPUnit/Framework/TestCase.php(776): PHPUnit_Framework_TestResult->run(Object(PostTest))
#9 /usr/share/php/PHPUnit/Framework/TestSuite.php(775): PHPUnit_Framework_TestCase->run(Object(PHPUnit_Framework_TestResult))
#10 /usr/share/php/PHPUnit/Framework/TestSuite.php(745): PHPUnit_Framework_TestSuite->runTest(Object(PostTest), …Run Code Online (Sandbox Code Playgroud) 我在一个项目上设置PHPUnit,其结构如下:
- build
- src
- service # PHP source code files here
- tests
- php
- unit # PHP unit tests here
- bootstrap.php # PHP unit tests here
- services
- MyTest.php
- ...
- vendor
Run Code Online (Sandbox Code Playgroud)
我创建了以下PHPUnit配置文件,该文件位于项目的根目录:
<phpunit
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.4/phpunit.xsd"
bootstrap="tests/php/unit/bootstrap.php"
verbose="true">
<testsuites>
<testsuite name="services">
<directory>tests/php/unit/services</directory>
</testsuite>
</testsuites>
<filter>
<whitelist>
<directory>src/service</directory>
</whitelist>
</filter>
<logging>
<log type="coverage-html" target="build/php/coverage"/>
<log type="coverage-clover" target="build/php/coverage.xml"/>
<log type="junit" target="build/php/test-results.xml"/>
</logging>
</phpunit>
Run Code Online (Sandbox Code Playgroud)
我想使用白名单,以便PHPUnit不测试项目外的PHP文件,例如vendor目录中的那些......但是看一下代码覆盖率报告,似乎没有考虑白名单:

正如在捕获中所看到的那样tests,vendor被写为0%被覆盖,尽管它们不应被分析,因为它们不属于白名单.目录的"2%文件" src对应于我编写的唯一测试,因此代码覆盖率似乎正确.
如何才能src/service …
摘要
我们正在编写单元测试来测试JWT令牌的创建和失效,并在每次尝试JWTAuth ::令牌无效时从JWTException接收"令牌无法从请求中解析"错误.
描述
在我们的控制器内部,要创建用户令牌,我们将通过用户电子邮件地址,然后返回JWT令牌.
之后,我们通过使用invalidateToken方法使令牌失效并通过发送Authorization标头来传递令牌来销毁令牌.
public function invalidateToken()
{
try {
JWTAuth::invalidate(JWTAuth::getToken());
return Response::json(['status' => 'success'], 200);
} catch (JWTException $e) {
return Response::json(['status' => 'error', 'message' => $e->getMessage()], 401);
}
}
Run Code Online (Sandbox Code Playgroud)
这通过使用Postman以及PHPStorms Restful客户端完美地工作.
当我们尝试为此方法编写测试时,我们面临错误响应和"无法从请求中解析令牌"错误消息.
我们的测试如下:
public function testInvalidateToken()
{
$createUserToken = $this->call('POST', '/token/create', ['email' => 'test@test.com']);
$user = $this->parseJson($createUserToken);
$response = $this->call('POST', '/token/invalidate',
[/* params */], [/* cookies */], [/* files */], ['HTTP_Authorization' => 'Bearer '.$user->token]);
// var_dump($user->token);
// die();
$data = $this->parseJson($response);
$this->assertEquals($data->status, 'success');
$this->assertEquals($data->status, '200');
} …Run Code Online (Sandbox Code Playgroud) 我对依赖于需要在测试环境中模拟的第三方API的控制器进行了一系列测试.我们覆盖功能测试客户端爬虫并模拟我们需要测试的依赖项.这里的关键是每次测试都会改变模拟.
在Symfony 3.2中,这个工作正常,但在Symfony 3.3中,由于现在注入服务的方式,我有一些弃用警告:
示例控制器测试用例:
class MyControllerTest extends WebTestCase
{
private static $kernelModifier = null;
public function setKernelModifier(\Closure $kernelModifier)
{
self::$kernelModifier = $kernelModifier;
$this->ensureKernelShutdown();
}
protected static function createClient(array $options = [], array $server = [])
{
static::bootKernel($options);
if ($kernelModifier = self::$kernelModifier) {
$kernelModifier->__invoke();
self::$kernelModifier = null;
};
$client = static::$kernel->getContainer()->get('test.client');
$client->setServerParameters($server);
return $client;
}
protected function getPropertyClient()
{
$mockService = (new PropertyMock())->getPropertyMock();
$this->setKernelModifier(function () use ($mockService) {
static::$kernel->getContainer()->set('app.property_service', $mockService);
});
return static::createClient();
}
protected function getPropertyFailureClient()
{
$mockService = …Run Code Online (Sandbox Code Playgroud) 我在我的目录f:\ lara_app中安装了一个Laravel应用程序.我使用PHP artisan serve来运行应用程序.我有Laravel版本5.4.36(通过Composer安装)
我没有尝试使用PHP单元进行测试.在f:/lara_app/tests/Unit/ExampleTest.php里面,我有以下代码:
namespace Tests\Unit;
use Tests\TestCase;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
class ExampleTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
public function testBasicTest()
{
$this->assertTrue(true);
}
public function myFirstTest()
{
$value = 'Hello World';
$this->assertTrue( 'Hello' === $value, 'Value should be Hello World');
}
}
Run Code Online (Sandbox Code Playgroud)
我现在尝试从命令提示符运行测试:
f:\lara_app> .vendor/phpunit/phpuni/phpunit
Run Code Online (Sandbox Code Playgroud)
但我收到以下消息:
'.vendor'不被识别为内部或外部命令,可操作程序或批处理文件
我如何运行PHPUnit测试?
提前致谢
我尝试使用PHPUnit v8。但是,我没有用PhpStorm成功。当我在PhpStorm中运行简单测试(类方法)时,收到以下消息:
PHP Fatal error: Uncaught PHPUnit\Runner\Exception: Class 'Mrself\\TreeType\\Tests\\Functional\\BuildingTest' could not be found in '/vagrant/symfony-tree-type/tests/Functional/BuildingTest.php'. in /vagrant/symfony-tree-type/vendor/phpunit/phpunit/src/Runner/StandardTestSuiteLoader.php:65
Run Code Online (Sandbox Code Playgroud)
是的,我有该类,是的,我已正确配置了psr:
"autoload": {
"psr-4": {
"Mrself\\TreeType\\": "./src/"
}
},
"autoload-dev": {
"psr-4": {
"Mrself\\TreeType\\Tests\\": "./tests/"
}
}
Run Code Online (Sandbox Code Playgroud)
我一切设置正确的证明是,当我运行vendor/bin/phpunit它时,它给我正确的结果。
当我在PhpStorm中运行方法时,得到了以下调用:
/usr/bin/php /vagrant/symfony-tree-type/vendor/phpunit/phpunit/phpunit --configuration /vagrant/symfony-tree-type/phpunit.xml --filter "/(::testFormCanBeBuild)( .*)?$/" Mrself\\TreeType\\Tests\\Functional\\BuildingTest /vagrant/symfony-tree-type/tests/Functional/BuildingTest.php --teamcity
Run Code Online (Sandbox Code Playgroud)
但是,如果我将类名称空间放在前面,那么\\一切也将正常运行。我不知道发生了什么事。PHPUnit版本7也可以正常工作。
phpunit ×10
php ×9
laravel-5 ×2
controller ×1
kohana ×1
laravel ×1
mocking ×1
pear ×1
phpstorm ×1
post ×1
symfony ×1
symfony-3.3 ×1
testcase ×1
unit-testing ×1
whitelist ×1