我有一些测试用例可以在失败时进入无限循环.是否有内置的方法来设置PHPUnit的测试超时持续时间?
如果没有,那么将这个功能添加到测试用例中最不显眼的方法是什么?
有人知道我做错了什么吗?我已经安装了phpunit,当我在/ opt/local/PEAR目录下时一切都很好,所以如果我去/ opt/local/PEAR目录并运行phpunit,我会得到:
Sebastian Bergmann的PHPUnit 3.5.11.
用法:phpunit [开关] UnitTest [UnitTest.php]
phpunit [开关]
blablabla
但如果我在另一条路上,我会得到:
警告:require_once(PHP/CodeCoverage/Filter.php):无法打开流:第38行的/ usr/local/bin/phpunit中没有此类文件或目录
致命错误:require_once():在第38行的/ usr/local/bin/phpunit中打开所需的'PHP/CodeCoverage/Filter.php'(include_path ='.:/ usr/lib/php')失败
我知道我的PATH有问题.我该如何解决?
我有测试套件,里面有很多测试.这是一个中等大小的:
ok 4 - CommodityBasketTest::testStartsOutEmpty
ok 5 - CommodityBasketTest::testCanAddACommodity
ok 6 - CommodityBasketTest::testWillAddOneCommodityByDefault
ok 7 - CommodityBasketTest::testCannotAddACommodityWithAnNonNumericQuantity
ok 8 - CommodityBasketTest::testAddingTheSameCommodityWillIncreaseItsQuantity
ok 9 - CommodityBasketTest::testMultipleCommodityCanBeAdded
ok 10 - CommodityBasketTest::testTakingFromAnEmptyBasketWontWork
ok 11 - CommodityBasketTest::testTakesFirstCommodityFromTheBasket
ok 12 - CommodityBasketTest::testCanRetrieveASpecificCommodity
ok 13 - CommodityBasketTest::testWillThrowExceptionOnMissingCommodity
ok 14 - CommodityBasketTest::testReturnsZeroWorthForEmptyBaskets
ok 15 - CommodityBasketTest::testReturnsProperWorthOfACommodity
ok 16 - CommodityBasketTest::testWillAccuratelyReturnStatistics
Run Code Online (Sandbox Code Playgroud)
我如何装备PHPUnit以便我可以以某种方式显示正在测试的基础方法,就像我在粘贴中一样?我对输出很灵活; 例如,我只想知道CommodityBasketTest::testReturnsZeroWorthForEmptyBaskets测试CommodityBasket::getValuation().
这就是我想要的:
-- CommodityBasket::__construct() --
ok 4 - CommodityBasketTest::testStartsOutEmpty
-- CommodityBasket::add() --
ok 5 - CommodityBasketTest::testCanAddACommodity
ok 6 - CommodityBasketTest::testWillAddOneCommodityByDefault
ok 7 …Run Code Online (Sandbox Code Playgroud) 我正在以这种方式测试控制器:
$crawler = $client->request('GET', 'lang/120');
Run Code Online (Sandbox Code Playgroud)
在print_r'ing $ crawler对象后,我可以看到目标URL是http:// localhost/lang/120.但是,我的目标主机是在我的机器上设置的虚拟主机,让我们说http://www.somehost.tld,我想使用它.我应该使用什么干净的手段进行单元测试来定位虚拟主机?
我已经尝试在我的phpunit.xml.dist文件中放入一个php变量并使用它:
<php>
<server name="HOSTNAME" value="http://www.somehost.tld/app.php/" />
</php>
Run Code Online (Sandbox Code Playgroud)
然后 :
$crawler = $client->request('GET', $_SERVER['HOSTNAME'] . 'lang/120');
Run Code Online (Sandbox Code Playgroud)
但这看起来很尴尬......是否有任何配置文件(config_test文件?)我应该放置该虚拟主机名?
感谢大家的帮助!
我正在使用PHPUnit版本3.6.2,并且总是得到
PHP ReflectionException:第113行的/pathTo/pear/PHPUnit/Runner/BaseTestRunner.php中不存在方法套件
运行单一测试时:
phpunit path/to/my/ClassToTest.php
Run Code Online (Sandbox Code Playgroud)
使用pear安装PHPUnit,我使用的是php 5.3.6
我应该修复任何PHP配置吗?或者这只是PHPUnit应该修复的东西.
班级
<?php
class ClassToTest extends PHPUnit_Framework_TestCase{
public function testSomething(){
$this->assertTrue(true);
}
}
Run Code Online (Sandbox Code Playgroud) 场景:我打开www.google.com,输入一些关键字并点击搜索按钮.现在我进入结果页面.我想获取此结果页面的当前URL,包括查询参数.
我发现了一个方法,getBrowserUrl()这里在GitHub上PHPUnit的硒.410行
但是这个方法返回了我在setUp函数中设置的值.
public function setUp(){
$this->setBrowser(testConfig::$browserName);
$this->setBrowserUrl('http://www.google.com/');
}
public function testGoogleSearch(){
$this->url('');
//input some keywords
.......
//click search button
.......
//want to get the url of result page
$resultUrl= $this->getBrowserUrl();
echo $resultUrl;
}
Run Code Online (Sandbox Code Playgroud)
我收到了一个字符串' http://www.google.com/ '而不是结果页的整个网址.请帮帮我,谢谢!
我正在使用PHPUnit,我必须检查json_decode结果.我有一个包含整数属性的对象,您可以在调试器视图中看到:
当我这样做:
$this->assertObjectHasAttribute('1507',$object);
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
PHPUnit_Framework_Assert::assertObjectHasAttribute() must be a valid attribute name
Run Code Online (Sandbox Code Playgroud)
我$object是一个例子stdClass
使用一个内存中的SQLite数据库迁移/因为它说回滚每一个测试我使用Laravel 5.3.22,想单元测试我的应用程序在这里.这是我的database.php配置的连接部分:
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
...
],
'testing' => [
'driver' => 'sqlite',
'database' => ':memory:',
'prefix' => '',
],
Run Code Online (Sandbox Code Playgroud)
这是phpunit env配置:
<php>
<env name="APP_ENV" value="testing"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="sync"/>
<env name="DB_CONNECTION" value="testing"/>
</php>
Run Code Online (Sandbox Code Playgroud)
phpunit配置暗示laravel shoud使用"testing"sqlite连接进行测试,但它并不关心并继续使用主mysql连接.这不是一个选项,我有一个庞大而复杂的架构,它不能用于使用mysql进行单元测试.我该怎么办?我无法模拟查询构建器,因为我需要断言它的结果.
我正在尝试为一个模型编写测试,该模型包含一些普通验证器和一个使用实体管理器和请求的自定义验证器.如果由于某种原因这很重要,我正在使用phpunit进行测试.
我通过对实体管理器和请求进行存根,然后验证某些对象来测试另一个测试中的自定义验证器.由于这证明自定义验证有效,我只需要测试正常验证,如果可以,只需将自定义验证器保留.
这是我的模型:
/**
* @MyAssert\Client()
*/
abstract class BaseRequestModel {
/**
* @Assert\NotBlank(message="2101")
*/
protected $clientId;
/**
* @Assert\NotBlank(message="2101")
*/
protected $apiKey;
// ...
}
Run Code Online (Sandbox Code Playgroud)
在我的测试中,我得到验证器,创建一个对象,然后验证它.
$validator = ValidatorFactory::buildDefault()->getValidator();
$requestModel = new RequestModel();
$errors = $validator->validate($requestModel);
Run Code Online (Sandbox Code Playgroud)
当然这会失败,因为它找不到为MyAssert\Client定义的Validator,它是一个服务,需要通过某个依赖注入容器来解析.
任何人都知道如何存根自定义验证器或将其从验证中排除?
我正在尝试测试我雄辩的模型,但我的测试仍然失败了"Class'Eloquent'not found'错误.如果我添加一个使用我的雄辩模型的路线并简单地打印存储在数据库中的一些信息,一切正常.只有在尝试运行phpunit时,才会发现eloquent没有被发现的问题.我的模型在应用程序/模型中,所以它应该包含在作曲家类图中,我已经完成了composer dump-autoload.我敢肯定我忽略了一些非常明显但我无法理解的东西.知道问题是什么吗?
我的测试:
class GameTest extends TestCase {
public function setUp(){
$this->game = Game::find(1);
}
public function testGameInstance(){
$this->assertInstanceOf('Game', $this->game);
}
}
Run Code Online (Sandbox Code Playgroud)
我的模特:
class Game extends Eloquent{
protected $table = 'gm_game';
protected $primaryKey = 'game_id';
}
Run Code Online (Sandbox Code Playgroud)