标签: phpunit

在Eclipse中调试一些PhpUnit测试

我使用Eclipse PDT for PHP.我可以运行我的PhpUnit测试:工作正常.

但我无法调试我的单元测试.有人已经这样做了吗?有人可以帮忙吗?

Messxoud,Thanx

eclipse debugging phpunit

12
推荐指数
2
解决办法
8959
查看次数

Zend_Test_PHPUnit_Constraint_DomQuery :: evaluate()的声明应该与PHPUnit_Framework_Constraint :: evaluate()的声明兼容

我正在尝试使用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)

php phpunit zend-framework

12
推荐指数
1
解决办法
2859
查看次数

PHPUnit测试套件包含路径

使用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)

在应用程序和测试目录之间设置包含路径的正确方法是什么?

php phpunit unit-testing

12
推荐指数
2
解决办法
1万
查看次数

Laravel单元测试 - 运行所有测试

我对Laravel和PHPUnit都很陌生,我在Ubuntu 12.04上使用Laravel 4.

当我phpunit从项目的主目录运行时,它运行Laravel附带的ExampleTest.php测试.我创建了自己的示例测试(与他们的示例完全相同,在同一目录中,只重命名文件和测试并执行不同的操作),并phpunit像以前一样再次运行; 但它仍然只运行ExampleTest.php - 而不是我创建的测试.但是,如果我跑phpunit path/to/myTest,它运行我的测试就好了.所以我觉得这是一个愚蠢的问题,但我怎么用一个命令运行所有测试(我认为phpunit应该这样做)?

谢谢您的帮助!

phpunit laravel laravel-4

12
推荐指数
1
解决办法
6872
查看次数

测试期间达到的最大连接MySql

当我启动我的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();

我检查了拆机是否被叫,是的.

我不明白的是:在每次测试中,都会创建一个新的连接实例,为什么这不是同一个实例?(像单身人士或登记处)?但是这个实例永远不会关闭,即使它在测试通过后也没有使用过.

我误会了什么,但不知道是什么.

php mysql phpunit database-connection zend-framework2

12
推荐指数
1
解决办法
1106
查看次数

PHPUnit:在命令行中运行时,显示代码覆盖率?

我正在从命令行运行测试PHPUnit,但无法弄清楚如何让它在终端中显示代码覆盖率结果.

它们的文档中有各种命令行选项,但它们都涉及以各种格式之一将结果输出到文件中.

我错过了明显的解决方案吗?或者我需要编写一个执行的批处理文件:

  1. 执行PHPUnit命令并将代码覆盖输出到文件的标志
  2. 将文件的内容输出到stdio,使其出现在终端中

command-line phpunit code-coverage

12
推荐指数
1
解决办法
7869
查看次数

PHPUnit命令行工具中的控制字符有什么问题?

当我从命令行运行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<是某种控制字符,应该由控制台以不同的方式使用(定位光标,删除字符等)

这可能有什么不对?

php command-line phpunit windows-xp

11
推荐指数
2
解决办法
2445
查看次数

将依赖项与数据提供程序相结合

我有一个测试方法依赖于另一个本身在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)

php phpunit

11
推荐指数
1
解决办法
2796
查看次数

PHP单元测试:测试应该在与类相同的命名空间下吗?

传统上,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 phpunit namespaces

11
推荐指数
1
解决办法
4137
查看次数

在测试执行期间隐藏输出

我的php代码中有一些var_dump(我知道最后一定没有,但仍然是),并且在测试运行时它们向控制台输出非必要的信息,有没有一种方法可以忽略一些代码执行?

我试过了

/**
 * @codeCoverageIgnore
 */
Run Code Online (Sandbox Code Playgroud)

// @codeCoverageIgnoreStart
print '*';
// @codeCoverageIgnoreEnd
Run Code Online (Sandbox Code Playgroud)

但这只是忽略了覆盖范围,仍然执行代码.

php testing phpunit

11
推荐指数
1
解决办法
3014
查看次数