我使用Eclipse PDT for PHP.我可以运行我的PhpUnit测试:工作正常.
但我无法调试我的单元测试.有人已经这样做了吗?有人可以帮忙吗?
Messxoud,Thanx
我正在尝试使用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) 使用phpunit,我在使用包含路径时遇到了一些麻烦,不是为了phpunit本身,而是为了我的代码和测试目录.
我有以下代码结构:
Application
-StringCalculator.php
tests
-StringCalculatorTest.php
Run Code Online (Sandbox Code Playgroud)
在我的StringCalculatorTest.php里面我有一个require语句:
require_once('../StringCalculator.php');
Run Code Online (Sandbox Code Playgroud)
phpunit StringCalculatorTest.php从tests文件夹内部运行完美.
但是,当我在根目录中引入phpunit.xml配置文件时,即
Application
-StringCalculator.php
tests
-StringCalculatorTest.php
phpunit.xml
Run Code Online (Sandbox Code Playgroud)
包含路径是拧紧的.我必须将require_once替换为
require_once('StringCalculator.php');
Run Code Online (Sandbox Code Playgroud)
在应用程序和测试目录之间设置包含路径的正确方法是什么?
我对Laravel和PHPUnit都很陌生,我在Ubuntu 12.04上使用Laravel 4.
当我phpunit从项目的主目录运行时,它运行Laravel附带的ExampleTest.php测试.我创建了自己的示例测试(与他们的示例完全相同,在同一目录中,只重命名文件和测试并执行不同的操作),并phpunit像以前一样再次运行; 但它仍然只运行ExampleTest.php - 而不是我创建的测试.但是,如果我跑phpunit path/to/myTest,它运行我的测试就好了.所以我觉得这是一个愚蠢的问题,但我怎么用一个命令运行所有测试(我认为phpunit应该这样做)?
谢谢您的帮助!
当我启动我的PHPUnit测试套件时,我达到了MySQL的最大连接限制(200).
热门修复是将max_connection设置为500,但我正在寻找Zend Framework 2上下文中更好的解决方案.
我试图把一些tearDown方法,但没有运气似乎是无用或不完整的解决方案.
这是一个代码示例:
protected function tearDown()
{
// i have two entitymanager
$this->getObjectManager()->get('doctrine.connection.orm_alternate')->close();
$this->getObjectManager()->get('doctrine.connection.orm_default')->close();
$this->application = null;
gc_collect_cycles();
parent::tearDown();
}
Run Code Online (Sandbox Code Playgroud)
我也尝试使用processIsolation转为true但是有些测试是如此之长以至于我认为我的控制台已经冻结或类似的东西....
使用doctrine2连接和Zend Framework,如何在PHPunit测试期间防止这种"连接太多"?
到目前为止,我试图修改@awons的提示
$this->getObjectManager()->get('doctrine.connection.orm_alternate')->close();
至
$this->getObjectManager()->get('doctrine.entitymanager.orm_alternate')->close();
我检查了拆机是否被叫,是的.
我不明白的是:在每次测试中,都会创建一个新的连接实例,为什么这不是同一个实例?(像单身人士或登记处)?但是这个实例永远不会关闭,即使它在测试通过后也没有使用过.
我误会了什么,但不知道是什么.
当我从命令行运行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<是某种控制字符,应该由控制台以不同的方式使用(定位光标,删除字符等)
这可能有什么不对?
我有一个测试方法依赖于另一个本身在PHPUnit中使用数据提供程序的方法:
/**
* @dataProvider getFields
*/
public function testCanDoSomeStuff($parm1, $parm2) {
$result = my_func($parm1, $parm2);
$this->assertNotNull($result);
return $result;
}
/**
* @depends testCanDoSomeStuff
*/
public function testCanDoSomeMoreStuff($result) {
$this->assertNotNull($result);
}
Run Code Online (Sandbox Code Playgroud)
我也有getFields()数据提供程序功能,这里不需要显示.
依赖于数据提供者传递的第一个测试 - $result不是null.
我希望测试结果将作为$result参数传递给依赖测试.但是,该testCanDoSomeMoreStuff函数接收NULL参数并且测试失败.
更新
这个简单的测试用例演示了这个问题
class MyTest extends PHPUnit_Framework_TestCase {
/**
* @dataProvider myFunc
*/
public function testCanDoSomeStuff($value) {
$this->assertNotNull($value);
return $value;
}
/**
* @depends testCanDoSomeStuff
*/
public function testCanDoSomeMoreStuff($value) {
$this->assertNotNull($value);
}
/**
* Data provider function …Run Code Online (Sandbox Code Playgroud) 传统上,Symfony 2.0 bundle目录结构有一个Tests应该放置测试的目录.
Acme
-> SomeBundle
-> Controller
-> Entity
-> Service
-> ...
-> Tests
-> Controller
-> Entity
-> Service
-> ...
-> OtherBundle
-> ...
Run Code Online (Sandbox Code Playgroud)
我知道测试工作即使它们与他们测试的类没有相同的命名空间.
namespace Acme\SomeBundle\Service;
/**
* Some service.
*
* @author varchar
* @since August 1, 2012
*/
class SomeService
{
}
Run Code Online (Sandbox Code Playgroud)
对于上面的类,我(对于一个)通常会在以下名称空间下进行测试(受目录结构的影响):
namespace Acme\SomeBundle\Tests\Service;
Run Code Online (Sandbox Code Playgroud)
现在,这可行.
但顺便说一句,我使用Netbeans IDE,它找不到测试类,除非它在同一名称空间下(当你只想测试一个文件时这是值得注意的).嗯,这可能只是一个Netbeans标准(或其他东西).
但是,无论如何将测试置于与被测试类相同的命名空间中是否合适?这样做有什么优点吗?
1)将测试放在与被测试的类相同的命名空间中是否合适?
2)这样做有什么优点吗?
我的php代码中有一些var_dump(我知道最后一定没有,但仍然是),并且在测试运行时它们向控制台输出非必要的信息,有没有一种方法可以忽略一些代码执行?
我试过了
/**
* @codeCoverageIgnore
*/
Run Code Online (Sandbox Code Playgroud)
和
// @codeCoverageIgnoreStart
print '*';
// @codeCoverageIgnoreEnd
Run Code Online (Sandbox Code Playgroud)
但这只是忽略了覆盖范围,仍然执行代码.
phpunit ×10
php ×7
command-line ×2
debugging ×1
eclipse ×1
laravel ×1
laravel-4 ×1
mysql ×1
namespaces ×1
testing ×1
unit-testing ×1
windows-xp ×1