标签: phpunit

Cygwin和PHPUnit:无法打开输入文件:/ cygdrive/c/xampp/php/phpunit

有没有办法从Cygwin运行PHPUnit?每次我运行PHPUnit我都会收到此错误:

Could not open input file: /cygdrive/c/xampp/php/phpunit
Run Code Online (Sandbox Code Playgroud)

我想在我的Zend Framework App中运行我的单元测试.我正在尝试使用Cygwin因为我更熟悉*Nix命令(我不是专家)而不是Windows.

谢谢,温伯特

phpunit cygwin

15
推荐指数
2
解决办法
9140
查看次数

PHPUnit存储测试类的属性

我是PHPUnit的初学者.

这是我创建的示例测试类:

class NewTest extends PHPUnit_Framework_TestCase
{
    protected $foo;

    function testFirst ()
    {
        $this->foo = true;
        $this->assertTrue($this->foo);
    }

    /**
     * @depends testFirst
     */
    function testSecond ()
    {
        $this->assertTrue($this->foo);
    }
}
Run Code Online (Sandbox Code Playgroud)

执行testSecond时,会抛出错误" Undefined property NewTest::$foo".

为什么会这样?每次测试执行后,PHPUnit都会清除新属性吗?有没有办法在测试中设置属性,以便在同一测试类的其他测试中可以访问它?

php testing phpunit properties

15
推荐指数
1
解决办法
4130
查看次数

在Symfony2中测试文件上载

在Symfony2文档中,它提供了一个简单的示例:

$client->request('POST', '/submit', array('name' => 'Fabien'), array('photo' => '/path/to/photo'));
Run Code Online (Sandbox Code Playgroud)

模拟文件上传.

但是在我的所有测试中,我在应用程序中的$ request对象中没有得到任何内容,并且$_FILES数组中没有任何内容.

这是一个简单WebTestCase的失败.它是自包含的,并$client根据您传入的参数测试构造的请求.它不测试应用程序.

class UploadTest extends WebTestCase {

    public function testNewPhotos() {
        $client = $this->createClient();
        $client->request(
            'POST', 
            '/submit', 
            array('name' => 'Fabien'), 
            array('photo' => __FILE__)
        );

        $this->assertEquals(1, count($client->getRequest()->files->all()));
    }
}
Run Code Online (Sandbox Code Playgroud)

只是为了清楚.这不是关于如何进行文件上传的问题,我可以做.它是关于如何在Symfony2中测试它们.

编辑

我确信我做得对.所以我已经为Framework创建了一个测试并发出了拉取请求. https://github.com/symfony/symfony/pull/1891

phpunit integration-testing file-upload functional-testing symfony

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

PHPUnit错误"未定义索引:HTTP_HOST"

我已经声明了一个HTTP_HOST,如下所示.

public function testReadUser() {

    $_SERVER['HTTP_HOST'] = "x.y";
    .
    .
    .
}
Run Code Online (Sandbox Code Playgroud)

尽管如此,phpunit给出了未定义的索引错误.为什么?

php phpunit netbeans

15
推荐指数
2
解决办法
9704
查看次数

首先抛出Mockery,然后在第二次调用时返回值

$client = Mockery::mock();
$client->shouldReceive('send')->andThrow($error)->andReturn(true);
Run Code Online (Sandbox Code Playgroud)

不幸的是,它只返回true但不首先抛出异常.如何在第一次调用时抛出异常,然后在方法的第二次调用时返回值?

编辑:

如果我手动编辑Mockery\Expectation.php和设置,这是有效的$_throw = true.

$client->shouldReceive('send')->twice()->andReturn($error, true);
Run Code Online (Sandbox Code Playgroud)

php phpunit mockery

15
推荐指数
1
解决办法
4527
查看次数

第一次测试Laravel 4应用程序(PHPSpec/BDD与PHPUnit/TDD)

我一直在和这个问题搏斗太久了.我知道我需要跳到一个或另一个,因为它们显然都是可行的/有用的工具,但是已经被困在了几个星期的两个方面.

PHPUnitPHPSpec - 哪一个可以带来更好的长期可维护性和编程实践?

我已经和几个经验丰富的PHPUnit谈过 - > PHPspec转换/用户现在发誓PHPspec,声称它通过BDD方法促进了更好的设计.但是,由于它是一个更新的工具,与PHPUnit相比缺乏社区/教程.

目前,我的PHP开发主要围绕Laravel 4开发.

在PHPUnit基本上融入Laravel框架的地方,看起来这可能是更容易的选择,但我真的很喜欢PHPSpec的BDD方面.然而,似乎PHPSpec不希望与Laravel的外观设置很好地配合(我也发现这可能是一个很好的做法,以便尽可能避开).

我真正的难题是哪一个更有可能成功地集成到现有的Laravel 4项目中,而现有的测试覆盖率为零.

我有一个早期/简短的尝试将PHPUnit和PHPSpec集成到现有项目中,但实际上只是不确定从哪里开始编写初始测试并最终废弃它们暂时.

我真的想弄清楚从长远来看哪一个可能更值得投入一些时间.

任何经历过两者的人的任何资源/见解都将受到高度赞赏.

tdd bdd phpunit phpspec laravel-4

15
推荐指数
1
解决办法
3866
查看次数

Laravel 5单元测试中未发现特征

我正在编写一些单元测试来测试Laravel 5应用程序中的API端点,并且许多端点需要用户身份验证.我没有在每个测试中使用相同的用户帐户创建代码,而是想要RegistersUsers在测试类上定义一个特征,它将具有一个registerUser()方法.

我的tests目录的目录结构是这样的:

/tests
    /Traits
        RegistersUsers.php
    TestCase.php
    UserTest.php
Run Code Online (Sandbox Code Playgroud)

我已命名TestCase.phpUserTest.php添加此命名空间声明:

namespace MyappTests;
Run Code Online (Sandbox Code Playgroud)

而且我RegistersUsers.php像这样命名:

namespace MyappTests\Traits;
Run Code Online (Sandbox Code Playgroud)

UserTest看起来像这样,使用命名空间和use声明,以便我可以利用RegistersUsers.

<?php

namespace MyappTests;

use MyappTests\Traits\RegistersUsers;

class UserTest extends TestCase
{
    use RegistersUsers;

    // ... rest of the class
Run Code Online (Sandbox Code Playgroud)

但是,当我运行测试时,PHPUnit死于致命错误:

在第9行/home/vagrant/demo-app-net/tests/UserTest.php中找不到Trait'MyappTests\Traits\RegistersUsers'

据我所知,我的命名空间是正确的,应该找到我的特点.我一直在与这个圈子四处走动,似乎无法弄明白.

php phpunit traits laravel laravel-5

15
推荐指数
2
解决办法
5834
查看次数

使用phpunit模拟PDO

我正在尝试模拟PDO对象在使用phpunit编写一些测试时使用,但我发现它非常复杂,并且找不到太多关于它的文档.我创建了这个xml结构:

<dataset>
    <table name="providers">
            <column>id</column>
            <column>name</column>
            <column>description</column>
            <row>
                    <value>1</value>
                    <value>provdier_1</value>
                    <value>phpunit first provider</value>
            </row>
    </table>
</dataset>
Run Code Online (Sandbox Code Playgroud)

现在我想查询providers表并获取数据,但我不知道如何做到这一点.

我开始嘲笑PDO对象,但我不明白我应该如何使用它以及如何在getConnection()方法中使用它.我的第一次尝试,我猜它离正确的方式很远,因为我在这里很迷失,看起来像这样:

class AdProvidersTest extends PHPUnit_Extensions_Database_TestCase
{
    public function getConnection()
    {
      $dsn = 'mydb';
      $user = '';
      $password = '';

      $pdo = $this->getMockBuilder('PDOMock')
        ->getMock();

        return $this->createDefaultDBConnection($pdo, 'adserverTesting');
    }

    public function getDataSet()
    {
        return $this->createXMLDataSet('adserverTesting.xml');
    }

}
Run Code Online (Sandbox Code Playgroud)

如何使连接与'adserverTesting.xml'文件交互,如何使用以下行查询它:

$ds = new PHPUnit_Extensions_Database_DataSet_QueryDataSet($this->getConnection());
$ds->addTable('adserverTesting', 'SELECT * FROM providers');
Run Code Online (Sandbox Code Playgroud)

php mysql phpunit pdo mocking

15
推荐指数
1
解决办法
4432
查看次数

从laravel中的测试套件中仅运行一个单元测试

使用phpunit命令Laravel将在我们的项目中运行所有单元测试.如何运行一个或特定的单元测试Laravel 5.1

我只想testFindToken从我的测试套件中运行.

<?php

use Mockery as m;
use App\Models\AccessToken;
use Illuminate\Foundation\Testing\WithoutMiddleware;

class AccessTokenRepositoryTest extends TestCase
{
    use WithoutMiddleware;

    public function setUp()
    {
        parent::setUp();

        $this->accessToken = factory(AccessToken::class);
        $this->repo_AccessToken = app()->make('App\Repositories\AccessTokenRepository');
    }

    public function testFindToken()
    {
        $model = $this->accessToken->make();
        $model->save();
        $model_accessToken = $this->repo_AccessToken->findToken($model->id);
        $this->assertInstanceOf(Illuminate\Database\Eloquent\Model::class, $model);
        $this->assertNotNull(true, $model_accessToken);
    }    
}
Run Code Online (Sandbox Code Playgroud)

php testing phpunit laravel

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

在PhpStorm中运行PHPUnit测试会添加"--teamcity"选项,从而导致错误

我有最新的PhpStorm(2016.2)和PHPUnit phar(5.5.4).出于某种原因,当我在PhpStorm的项目中运行PHPUnit测试时,它会添加--teamcity到run命令,导致失败:

Testing started at 12:52 PM ...
Unit test suite invoked with a path to a non-unit test: --teamcity
Process finished with exit code 1
Run Code Online (Sandbox Code Playgroud)

我不知道这个--teamcity选项来自哪里,无论我运行什么测试,甚至从空白配置开始,它都会发生.我也没有安装TeamCity插件,我甚至没有使用TeamCity.

以下是完整命令显示的内容:

/usr/local/Cellar/php70/7.0.9/bin/php /Users/name/bin/phpunit-5.5.4.phar --configuration /path/to/config/my-phpunit.xml ClassNameTest /Users/name/PhpstormProjects/path/to/tests/unit/app/ClassNameTest.php --teamcity
Run Code Online (Sandbox Code Playgroud)

(敏感信息被换掉)

我想要做的就是摆脱这个--teamcity选项,如果我在没有该选项的单独终端窗口中运行,一切都会正常工作.这最近才开始发生,也许是在PhpStorm更新之后.

teamcity phpunit phpstorm

15
推荐指数
3
解决办法
4603
查看次数