我们目前使用手动设置和配置脚本以及手动连续集成脚本来构建和部署我们的应用程序.我正在考虑使用专为这些目的而设计的第三方系统来正式化这一点.
我之前看过Phing,我知道它基本上就像Ant.但是,我的Ant体验有点受限,所以对我没有多大帮助.(我所做的大部分Java工作都是作为jar文件部署的).
之前我已经研究过Cruise Control,我知道phpUnderControl是CC的一个插件.但是,Phing说它也适用于CC.所以我不清楚这里的重叠.我是否需要使用Phing和phpUnderControl来使用CruiseControl,还是它们是相互排斥的?
我需要的是能够:
现在,我们以这种或那种形式提供所有这些.但是,将它全部自动化并在一个过程中捆绑在一起会很不错.
我有一个命令行脚本生成一些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) 注意:我已阅读有关此问题的所有问题
PEAR在我的系统上安装和配置(Ubuntu 11.10 + Apache/2.2.20).因为
<?php
require_once 'System.php';
var_dump(class_exists('System', false));
?>
Run Code Online (Sandbox Code Playgroud)
回来这个:
bool(true)
Run Code Online (Sandbox Code Playgroud)
当我试图使用phpunit我收到此错误.
PHP Warning: require_once(PHP/CodeCoverage/Filter.php): failed to open stream: No such file or directory in /usr/bin/phpunit on line 38
PHP Fatal error: require_once(): Failed opening required 'PHP/CodeCoverage/Filter.php' (include_path='.:/usr/share/php:/usr/share/pear') in /usr/bin/phpunit on line 38
Run Code Online (Sandbox Code Playgroud)
在此错误之后我决定安装它
sudo /usr/bin/pear install phpunit/PHP_CodeCoverage
Run Code Online (Sandbox Code Playgroud)
但我得到了
phpunit/PHP_CodeCoverage requires PEAR Installer (version >= 1.9.4), installed version is 1.9.2
Run Code Online (Sandbox Code Playgroud)
升级PEAR时出现此错误 sudo pear upgrade
PHP Fatal error: Call to undefined method PEAR_Registry::packageinfo() in /usr/share/php/PEAR/Dependency2.php …Run Code Online (Sandbox Code Playgroud) 假设你有一种最终归结为的方法
class Pager
{
private $i;
public function next()
{
if ($this->i >= 3) {
throw new OutOfBoundsException();
}
$this->i++;
}
}
Run Code Online (Sandbox Code Playgroud)
你将如何对这门课进行单元测试.即测试是否在next()使用PHPUnit 的第三次调用时抛出异常?我添加了我的尝试作为答案,但我不确定这是否真的是要走的路.
PHPUnit似乎通过序列化预期值和实际值来打印失败的测试用例,并显示它们之间的差异.此外,序列化使用省略号截断值,隐藏我想要的信息.
这是PHPUnit生成的输出示例:
/Foo/Bar/Baz.php:31
8) Foo\Bar\Baz::test with data set #7 ('foo,bar,baz,qux', array(array('foo', 'bar'), array('baz', 'qux')))
Failed asserting that two arrays are equal.
--- Expected
+++ Actual
@@ @@
Array (
- 0 => Array (...)
- 1 => Array (...)
+ 'j' => 16
+ 'args' => Array (...)
)
Run Code Online (Sandbox Code Playgroud)
我希望看到完整的预期值和完整的实际值.我也希望它扩展那些...被忽略的价值观.我怎么做到这一点?
PhpStorm有某种奇怪的行为让我发疯.我的项目设置有一个source和一个test目录.该source目录应该是高效的代码,而test目录应该包含所有的phpunit测试.
在这些目录中,文件夹结构是镜像的 - 如果我有一个类\foo\Bar,那么有
src/foo/Bar.php和test/foo/BarTest.php.
我已经在PhpStorm中标记src/并test/作为源和测试目录,但是,每次我想为类创建一个新的测试套件时,PhpStorm默认将测试类放入被测试类src/旁边的目录中.
可以改变它,但是当相同的目录test/还不存在时,它会变得更烦人.而不是创建它,PhpStorm将拒绝为我创建该测试套件.
也许我误解了PhpStorm中测试管理背后的概念 - 因为它不会是那么糟糕的用户体验.
有什么我做错了,或者我可以配置什么来减轻这种情况?
我正在尝试在我的Laravel项目中设置测试环境.我正在使用http://packalyst.com/packages/package/mayconbordin/l5-fixtures与json一起在内存数据库中使用sqlite进行播种并调用:
Artisan::call('migrate');
Artisan::call('db:seed');
Run Code Online (Sandbox Code Playgroud)
在我的setUp函数中,这是在每个测试之前执行的,它可以在这个项目中增长到数千个.
我尝试了setUpBeforeClass,但它没有用.我认为是因为createApplication方法在每次测试中被调用并且重置整个应用程序,并且也没有从json加载灯具可能是出于同样的原因.
使用testdox-html生成日志文件时,显示的结果只是测试方法的名称,如果失败则通过文本进行,如果通过则为正常.我想要的是testdox文件生成错误信息,就像命令行输出一样.这是可能吗?
如何在"PHP内"运行测试而不是使用'phpunit'命令?例:
<?php
require_once 'PHPUnit/Extensions/SeleniumTestCase.php';
class MySeleniumTest extends PHPUnit_Extensions_SeleniumTestCase {
protected function setUp() {
$this->setBrowser("*firefox");
$this->setBrowserUrl("http://example.com/");
}
public function testMyTestCase() {
$this->open("/");
$this->click("//a[@href='/contact/']");
}
}
$test = new MySeleniumTest();
//I want to run the test and get information about the results so I can store them in the database, send an email etc.
?>
Run Code Online (Sandbox Code Playgroud)
或者我是否必须将测试写入文件,通过system()/ exec()调用phpunit并解析输出?:(
我想设置Bamboo CI Server.我创建了两个阶段:
第1阶段没问题,但在第2阶段我有错误.在构建日志中我有:
Starting task 'PHPUnit Testing' of type 'com.atlassian.bamboo.plugins.php:task.builder.phpunit'
12-pa?-2014 10:45:49
Beginning to execute external process for build 'CCP - CI - Unit Testing Build - Default Job #4 (CCPCI-UTB-JOB1-4)'
... running command line:
/usr/local/bin/phpunit --log-junit test-reports/phpunit.xml --coverage-html test-reports/coverage/html --bootstrap /var/www/html/ccp/core/tests/bootstrap.php --no-configuration /var/www/html/ccp/core/tests
... in: /home/bamboo/bamboo_home/xml-data/build-dir/CCPCI-UTB-JOB1
12-pa?-2014 10:45:49 X-Powered-By: PHP/5.5.11
12-pa?-2014 10:45:49 Content-type: text/html
12-pa?-2014 10:45:49
12-pa?-2014 10:45:49 Failing task since text 'OK' was not found in last 250 log entries
12-pa?-2014 10:45:49 Parsing test results... …Run Code Online (Sandbox Code Playgroud)