有没有办法从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的初学者.
这是我创建的示例测试类:
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都会清除新属性吗?有没有办法在测试中设置属性,以便在同一测试类的其他测试中可以访问它?
在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
我已经声明了一个HTTP_HOST,如下所示.
public function testReadUser() {
$_SERVER['HTTP_HOST'] = "x.y";
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
尽管如此,phpunit给出了未定义的索引错误.为什么?
$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) 我一直在和这个问题搏斗太久了.我知道我需要跳到一个或另一个,因为它们显然都是可行的/有用的工具,但是已经被困在了几个星期的两个方面.
PHPUnit与PHPSpec - 哪一个可以带来更好的长期可维护性和编程实践?
我已经和几个经验丰富的PHPUnit谈过 - > PHPspec转换/用户现在发誓PHPspec,声称它通过BDD方法促进了更好的设计.但是,由于它是一个更新的工具,与PHPUnit相比缺乏社区/教程.
目前,我的PHP开发主要围绕Laravel 4开发.
在PHPUnit基本上融入Laravel框架的地方,看起来这可能是更容易的选择,但我真的很喜欢PHPSpec的BDD方面.然而,似乎PHPSpec不希望与Laravel的外观设置很好地配合(我也发现这可能是一个很好的做法,以便尽可能避开).
我真正的难题是哪一个更有可能成功地集成到现有的Laravel 4项目中,而现有的测试覆盖率为零.
我有一个早期/简短的尝试将PHPUnit和PHPSpec集成到现有项目中,但实际上只是不确定从哪里开始编写初始测试并最终废弃它们暂时.
我真的想弄清楚从长远来看哪一个可能更值得投入一些时间.
任何经历过两者的人的任何资源/见解都将受到高度赞赏.
我正在编写一些单元测试来测试Laravel 5应用程序中的API端点,并且许多端点需要用户身份验证.我没有在每个测试中使用相同的用户帐户创建代码,而是想要RegistersUsers在测试类上定义一个特征,它将具有一个registerUser()方法.
我的tests目录的目录结构是这样的:
/tests
/Traits
RegistersUsers.php
TestCase.php
UserTest.php
Run Code Online (Sandbox Code Playgroud)
我已命名TestCase.php并UserTest.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'
据我所知,我的命名空间是正确的,应该找到我的特点.我一直在与这个圈子四处走动,似乎无法弄明白.
我正在尝试模拟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) 使用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) 我有最新的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更新之后.