我正在尝试使用PHPUnit 3.6.4对我的Zend Framework应用程序进行单元测试.我在命令提示符中尝试此命令时出现以下错误.
C:\xampp\htdocs\testsample\tests>phpunit --configuration phpunit.xml
PHPUnit 3.6.4 by Sebastian Bergmann.
Configuration read from C:\xampp\htdocs\testsample\tests\phpunit.xml
?[31;1mE?[0m?[31;1mE?[0m..
Time: 0 seconds, Memory: 10.00Mb
There were 2 errors:
1) IndexControllerTest::testIndexWithMessageAction
Declaration of Zend_Test_PHPUnit_Constraint_DomQuery::evaluate() should be compatible
with that of PHPUnit_Framework_Constraint::evaluate()
C:\xampp\htdocs\hive\library\Zend\Test\PHPUnit\Constraint\DomQuery.php:40
C:\xampp\htdocs\hive\library\Zend\Test\PHPUnit\ControllerTestCase.php:512
C:\xampp\htdocs\testsample\tests\application\controllers\IndexControllerTest.php
:14
C:\xampp\php\PEAR\PHPUnit\Framework\TestCase.php:925
C:\xampp\php\PEAR\PHPUnit\Framework\TestCase.php:787
C:\xampp\php\PEAR\PHPUnit\Framework\TestResult.php:649
C:\xampp\php\PEAR\PHPUnit\Framework\TestCase.php:734
C:\xampp\php\PEAR\PHPUnit\Framework\TestSuite.php:772
C:\xampp\php\PEAR\PHPUnit\Framework\TestSuite.php:745
C:\xampp\php\PEAR\PHPUnit\Framework\TestSuite.php:705
C:\xampp\php\PEAR\PHPUnit\TextUI\TestRunner.php:325
C:\xampp\php\PEAR\PHPUnit\TextUI\Command.php:187
C:\xampp\php\PEAR\PHPUnit\TextUI\Command.php:125
C:\xampp\php\phpunit:44
2) IndexControllerTest::testIndexNoMessageAction
Declaration of Zend_Test_PHPUnit_Constraint_ResponseHeader::evaluate() should be
compatible with that of PHPUnit_Framework_Constraint::evaluate()
C:\xampp\htdocs\hive\library\Zend\Test\PHPUnit\Constraint\ResponseHeader.php:400
C:\xampp\htdocs\hive\library\Zend\Test\PHPUnit\ControllerTestCase.php:769
C:\xampp\htdocs\hive\library\Zend\Test\PHPUnit\ControllerTestCase.php:769
C:\xampp\htdocs\testsample\tests\application\controllers\IndexControllerTest.php
:22
C:\xampp\php\PEAR\PHPUnit\Framework\TestCase.php:925
C:\xampp\php\PEAR\PHPUnit\Framework\TestCase.php:787
C:\xampp\php\PEAR\PHPUnit\Framework\TestResult.php:649
C:\xampp\php\PEAR\PHPUnit\Framework\TestCase.php:734
C:\xampp\php\PEAR\PHPUnit\Framework\TestSuite.php:772
C:\xampp\php\PEAR\PHPUnit\Framework\TestSuite.php:745
C:\xampp\php\PEAR\PHPUnit\Framework\TestSuite.php:705
C:\xampp\php\PEAR\PHPUnit\TextUI\TestRunner.php:325
C:\xampp\php\PEAR\PHPUnit\TextUI\Command.php:187
C:\xampp\php\PEAR\PHPUnit\TextUI\Command.php:125
C:\xampp\php\phpunit:44 …Run Code Online (Sandbox Code Playgroud) 让我马上谈谈:
我有一个使用Silex和Twig作为模板引擎的PHP Web应用程序.为了处理和缩小css/js文件,我正在尝试使用Assetic和Silex-Twig/Assetic-Extensions.
我已经注册了silex扩展并设置了我想要使用的过滤器.现在我对如何将文件转储到我的树枝模板中没有任何线索.谷歌搜索让我陷入困境.由于lessfile中的属性可以根据请求进行更改,因此我认为没有办法静态传递文件.
这是我对silex扩展的实现:
$oApp = new Silex\Application();
//$oApp['autoloader']->registerNamespace('Assetic', DIR_VENDOR.'/assetic/src');
//$oApp['autoloader']->registerNamespace('SilexExtension', DIR_VENDOR.'/silex-extension/src');
//$oApp['autoloader']->registerNamespace('Twig', DIR_VENDOR.'/twig/lib');
$oApp->register(
new Silex\Provider\TwigServiceProvider(), array(
'twig.path' => DIR_ROOT.'/src/templates',
'twig.class_path' => DIR_VENDOR.'/twig/lib',
),
new SilexExtension\AsseticExtension(), array(
'assetic.class_path' => DIR_VENDOR.'/assetic/src',
'assetic.path_to_web' => DIR_ASSETS,
'assetic.options' => array(
'debug' => false,
'formulae_cache_dir' => DIR_TMP.'/Assetic/cache',
'twig_support' => true
),
'assetic.filters' => $oApp->protect(function($fm) {
$fm->set('yui_css', new Assetic\Filter\Yui\CssCompressorFilter(
DIR_YUI.'/yuicompressor-2.4.7.jar'
));
$fm->set('yui_js', new Assetic\Filter\Yui\JsCompressorFilter(
DIR_YUI.'/yuicompressor-2.4.7.jar'
));
$fm->set('googlecc_js', new Assetic\Filter\GoogleClosure\CompilerJarFilter(
DIR_GOOGLE_CC.'/compiler.jar'
));
}),
'assetic.assets' => $oApp->protect(function($am, $fm) {
$am>-set('styles', new Assetic\Asset\AssetCache(
new …Run Code Online (Sandbox Code Playgroud) 当我从命令行运行phpunit时,控制字符将被打印出来而不是像控制字符那样.看看这个:
PHPUnit 3.6.5 by Sebastian Bergmann.
Configuration read from app\phpunit.xml.dist
...
Time: 1 second, Memory: 12.00Mb
‹[30;42m‹[2KOK (3 tests, 3 assertions)
‹[0m‹[2K
Run Code Online (Sandbox Code Playgroud)
我认为这些符号‹[30;42m<是某种控制字符,应该由控制台以不同的方式使用(定位光标,删除字符等)
这可能有什么不对?
有没有人有关于如何开始将DBUnit层添加到我的PHPUNit测试的好的,有用的教程或书籍的链接?
我试过跟随代码
protected function getDatabaseTester()
{
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$connection = new PHPUnit_Extensions_Database_DB_DefaultDatabaseConnection($pdo);
$tester = new PHPUnit_Extensions_Database_DefaultTester($connection);
$tester->setSetUpOperation(PHPUnit_Extensions_Database_Operation_Factory::CLEAN_INSERT());
$tester->setTearDownOperation(PHPUnit_Extensions_Database_Operation_Factory::NONE());
/*
* the next line fails with the error
PHP Fatal error: __autoload(): Failed opening required 'PHPUnit_Extensions_Database_DataSet_FlatXMLDataSet.php' (include_path= ***
*/
$tester->setDataSet(new PHPUnit_Extensions_Database_DataSet_FlatXMLDataSet(dirname(__FILE__).'/../../../files/xml_database_export.xml'));
return $tester;
}
Run Code Online (Sandbox Code Playgroud)
XML是通过mysqldump命令创建的.我很乐意使用CSV,甚至是内存中的数组(无论什么工作)
不幸的是,我似乎无法启动此系统.
我在phpunit中运行一系列测试,这些测试存在于单独的测试套件中,其列表由phpunit配置文件控制.当测试单独运行时(即不是通过配置文件运行,因此一次运行测试套件)它们通过但是,当一起运行时,我会失败.
仔细研究一下,问题是每个测试套件都在框架中加载(通过require_once),并且该框架根据require_once时的设置进行一些内部配置.看来,在运行phpunit配置文件中单独列出的测试套件之间,各种各样的事情仍然存在.在这种特殊情况下,框架已被视为已加载.
那么 - 有没有办法让phpunit独立执行一系列测试套件,即等同于在测试套件上一次运行一个phpunit? (phpunit正在由autotest机器上的cruisecontrol触发,并且在提交之前由开发人员在本地触发.)我尝试了诸如'--process-isolation'和'--no-globals-backup'之类的选项但没有成功.
一个说明问题的简单例子是'constant.php'文件:
<?php
if (defined('XYZZY')) define('TEST', 1);
else define('TEST', 2);
Run Code Online (Sandbox Code Playgroud)
testuite'TestOne.php':
<?php
define('XYZZY', "");
require_once('constant.php');
class TestOne extends PHPUnit_Framework_TestCase
{
public function testOne()
{
$this->assertEquals(TEST, 1);
}
}
Run Code Online (Sandbox Code Playgroud)
一个类似的测试套件'TestTwo.php':
<?php
require_once('constant.php');
class TestTwo extends PHPUnit_Framework_TestCase
{
public function testTwo()
{
$this->assertEquals(TEST, 2);
}
}
Run Code Online (Sandbox Code Playgroud)
和一个phpunit配置文件:
<phpunit>
<testsuites>
<testsuite name="First">
<file>./TestOne.php</file>
</testsuite>
<testsuite name="Second">
<file>./TestTwo.php</file>
</testsuite>
</testsuites>
</phpunit>
Run Code Online (Sandbox Code Playgroud) 那么问题就是自我解释.
在PHP中何时使用if/endif符号而不是标准if(something){}符号?
例:
<?php if($a == 5): ?>
A is equal to 5
<?php endif; ?>
Run Code Online (Sandbox Code Playgroud)
与:
<?php if($a == 5){ ?>
A is equal to 5
<?php } ?>
Run Code Online (Sandbox Code Playgroud) 我拥有一个在美国和加拿大开展业务的高流量网站.我们有很多服务器,但我想确保它100%可用,没有任何延迟.
我已经学会了创建自定义扩展(我知道一点C),我想创建自定义验证/文件(因为php扩展运行得更快).
我不想要求你们提供所有新的扩展,但我想知道如何构建它的一般想法(我使用的是CentOS).
例:
我们网站的一部分是送货跟踪,这需要邮政编码.
对于美国,我有:
function check_usa_postal_code($pc) {
return is_numeric($pc);
}
Run Code Online (Sandbox Code Playgroud)
但对于加拿大,我想在PHP中构建一个自定义函数,如:
check_canada_postal_code($pc)
此函数应返回1或0.
谢谢
我正在测试工厂类.其中一个方法必须将数据加载到另一个方法将实例化的对象的数组中.
该方法包含SQL查询,该查询包含必须测试的严重条件.(在这种情况下,只询问"已发布"的记录.例如:WHERE published = 1).SQL Query中的这种区别是使该方法与另一种方法不同的唯一细节,我想测试查询执行行为.
现在,我无法模拟我的PDO对象并要求它返回一个固定的结果,因为我不会测试mySQL执行查询.这将是一个无用的测试.
这让我觉得我需要在其中设置一个带有固定测试数据的静态数据库.我是对的还是我错过了什么?
我应该将需要"测试数据库"的测试与自主测试分开吗?
我有一个命令行脚本生成一些HTML,我试图使用PHPUnit进行单元测试.请注意,浏览器看不到此HTML ,因此Selenium不是正确的解决方案.
我只关心比较实际的HTML结构.我正在使用,assertEquals()但strings由于各种空白字符,实际可能不完全相同.
public function testHtmlIsIdentical()
{
$expectedReport = file_get_contents('expected.html');
$this->report->setupSomeData('test data');
$actualReport = $this->report->generateHtml();
$this->assertEquals($expectedReport, $actualReport);
}
Run Code Online (Sandbox Code Playgroud)
我可以做些什么来比较HTML的结构(节点)而不是HTML的字符串?是否有PHPUnit的功能允许这个?是否有用于比较HTML的独立库?
PHPUnit有比较XML的断言:
assertXmlStringEqualsXmlFile在这种情况下完美的工作:
public function testHtmlIsIdentical()
{
$this->report->setupSomeData('test data');
$this->assertXmlStringEqualsXmlFile('expected.html', $this->report->generateHtml());
}
Run Code Online (Sandbox Code Playgroud) 我正在做一些重载到使用CaptureEntirePageScreenshotToString函数的PHPUnit的Selenium扩展,我想只打印截图的路径,因为我们只在传递--verbose或--debug时才去.
例如,
phpunit --debug ./tests
然后在我的代码中的某处(这是psudo代码)
if (--debug)
echo "Screenshot: /path/to/screenshot.png
Run Code Online (Sandbox Code Playgroud)
建议?
php ×10
phpunit ×7
assetic ×1
command-line ×1
dbunit ×1
factory ×1
html ×1
if-statement ×1
mysql ×1
silex ×1
twig ×1
unit-testing ×1
windows-xp ×1