标签: phpunit

无法通过pear安装PHPUnit

可能重复:
通过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

php pear phpunit

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

PHPUnit - 使用$ _POST变量测试MVC控制器

我正在和Kohana一起开始使用PHPUnit.我的应用程序有许多控制器,它只是从某种形式获取数据,验证和插入/更新/删除到/ - /从数据库.我应该如何为此编写测试用例.

我知道如果我想测试一个函数,我会编写数据提供程序函数,只是将返回值与预期函数进行比较.但我的输入数据(来自表单的数据)正在$_POST变量中传递.我该怎么测试呢?之后,我应该检查插入的数据是否真的在数据库中?请给出我对这类测试的一些指导或链接到一些示例/教程.谢谢.

php post phpunit controller kohana

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

模拟支持链接方法的对象

我想知道是否有一种相当简洁的方法来模拟支持方法链接的对象...例如,数据库查询对象可能有一个如下所示的方法调用:

$result = $database->select('my_table')->where(array('my_field'=>'a_value'))->limit(1)->execute();
Run Code Online (Sandbox Code Playgroud)

如果我必须模拟两个不同的选择查询,以便它们返回不同的结果,则会出现问题.有任何想法吗?

这是关于PHPUnit的,但其他单元测试框架的经验将有所帮助.

php phpunit unit-testing mocking

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

在断言实例之前,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配置错了吗?有没有办法避免在我的测试中再次要求这门课程?

php phpunit

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

在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)

php phpunit exception-handling

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

PHPUnit的白名单和黑名单似乎被忽略了

我在一个项目上设置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 …

php phpunit whitelist

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

Laravel TestCase不发送授权头(JWT令牌)

摘要

我们正在编写单元测试来测试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)

php phpunit testcase laravel-5

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

在控制器测试中覆盖Symfony 3.3容器服务

我对依赖于需要在测试环境中模拟的第三方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)

php phpunit dependency-injection symfony symfony-3.3

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

如何从Windows命令提示符在Laravel中运行PHPUnit

我在我的目录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测试?

提前致谢

php phpunit laravel laravel-5

7
推荐指数
4
解决办法
4229
查看次数

PhpStorm与PHPUnit 8.4给出异常Uncaught PHPUnit \ Runner \ Exception类...找不到

我尝试使用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 phpstorm

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