标签: phpunit

如何使用PHPUnit测试集合类

我有一个类似于此的类(为简洁起见,删除了一些逻辑):

class FooCollection {
    protected $_foos;

    public function __construct() {
        $this->_foos = new SplObjectStorage();
    }

    public function addFoo(FooInterface $foo) {
        $this->_foos->attach($foo);
    }

    public function removeFoo(FooInterface $foo) {
        $this->_foos->detach($foo);
    }
}
Run Code Online (Sandbox Code Playgroud)

我想用PHPUnit 来测试addFoo()removeFoo()方法,我想知道最好的策略是什么呢?据我所知,我只有几个选择:

  1. 添加方法hasFoo(FooInterface $foo)并在添加后检查此方法.
  2. 添加一个getFoos()直接返回SplObjectStorage实例的方法,并$foo在添加后检查是否在其中.
  3. 尝试removeFoo($foo)之后addFoo($foo)并检查异常.
  4. 制作$_foos公共财产并在添加后直接检查(坏,坏,坏......).

选项#1和#2正在改变公共接口仅用于测试目的,我不确定我对此的看法.它们似乎是非常通用的,有用的方法,但在我的特定情况下,我从来不需要检查Foo集合中特定实例的存在,也不需要检索所有实例,所以它真的会只是臃肿.此外,似乎如果我在一次测试中测试界面的多个部分,我不是真的在测试一个"单位",但这或多或少只是一个哲学挂断.

选项#3对我来说似乎很尴尬.

选项#4是一个非常糟糕的主意,我甚至不应该列出它,因为即使在这里建议,我也不会这样做.

php phpunit

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

PHPUnit assertNull()测试失败

我确定我测试的数组是null.甚至做var_dump(array)印刷品array(0) { }.

但测试$this->assertNull($array);失败了.
相反,当我测试下面的代码时,它进入if条件:

if ($array == null) {
    echo "Entered";
} else {
    echo "Not Entered";
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么会这样.如果有人知道原因,请解释我.

php phpunit assertions

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

更改窗口大小PHPUnit Selenium2TestCase

我需要在测试开始时最大化我的窗口,然后我找到了这个PHPUnit_Extensions_Selenium2TestCase_Window.

所以我尝试使用这种方法,$this->maximize()但我只是得到了

BadMethodCallException:命令'maximize'不存在或不受支持.

有人知道怎么做吗?

php selenium phpunit

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

Jenkins(使用Ant)不执行PHPUnit测试

我正在尝试在我的PHP应用程序(Symfony2)中使用Jenkins和Ant,但无法执行我的测试.我可以在Jenkins的"控制台输出"屏幕中看到正在读取正确的配置文件,但它显示没有执行任何测试.

当我从项目的根目录中运行cli中的Ant build.xml文件时,构建成功并且我的测试执行并通过.

如果我进入/Users/Shared/Jenkins/ {....}/workspace目录并运行'sudo ant',它表示没有执行任何测试!这是令人困惑的,因为完全相同的build.xml文件在从我的项目根目录运行时执行测试.

我的buil.xml文件的相关部分是:

<target name="phpunit" description="Run unit tests with PHPUnit">
    <exec executable="phpunit" failonerror="true">
        <arg value="-c" />
        <arg path="${workspace}/app/phpunit.xml.dist" />
    </exec>
</target>
Run Code Online (Sandbox Code Playgroud)

app/phpunit.xml看起来像:

<?xml version="1.0" encoding="UTF-8"?>

<!-- http://www.phpunit.de/manual/current/en/appendixes.configuration.html -->
<phpunit
        backupGlobals               = "false"
        backupStaticAttributes      = "false"
    colors                      = "true"
    convertErrorsToExceptions   = "true"
    convertNoticesToExceptions  = "true"
    convertWarningsToExceptions = "true"
    processIsolation            = "false"
    stopOnFailure               = "false"
    syntaxCheck                 = "false"
    bootstrap                   = "bootstrap.php.cache" >

<testsuites>
    <testsuite name="Project Test Suite">
        <directory>../src/*/*Bundle/Tests</directory>
    </testsuite>
</testsuites>

<filter>
    <whitelist>
        <directory>../src</directory>
        <exclude>
            <directory>../src/*/*Bundle/Resources</directory>
            <directory>../src/*/*Bundle/Tests</directory>
            <directory>../src/*/Bundle/*Bundle/Resources</directory>
            <directory>../src/*/Bundle/*Bundle/Tests</directory> …
Run Code Online (Sandbox Code Playgroud)

php ant phpunit symfony jenkins

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

如何在OSX 10.8.4下使用MAMP 2.1.4为Yii和Netbeans安装phpunit?

我想在运行OSX 10.8.4的本地机器和PHP 5.4.1的MAMP Pro上使用phpunit测试.此外,我想将它用于Yii和我的IDE Netbeans.

我通过pear阅读了一些像这种方法的教程,或者通过作曲家阅读这个教程.我甚至试图在Windows上看起来像ppl一样- 没有成功.

我的方法总是导致错误

PHP警告:include():打开'PHP_Invoker.php'失败

PHP警告:include():打开'PHPUnit_Extensions_Database_TestCase.php'失败

PHP警告:include():打开'PHPUnit_Extensions_Story_TestCase.php'失败

打开所需的'PHPUnit/Extensions/SeleniumTestCase.php'失败

PHP致命错误:找不到类'CTestCase'

或者根本找不到phpunit.

php phpunit netbeans mamp yii

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

PhpUnit引导参数

我有一个phpunit.xml,它定义了要测试的测试以及bootstrap文件的位置.我还想在phpunit.xml中定义可以在bootstrap期间访问的参数.

这是我的phpunit.xml:

<phpunit bootstrap="./bootstrap.php" colors="true" bootstrapArg="abcdefgh">
    <testsuite name="TestSuite">

        <file>./Test1.php</file>
        <file>./Test2.php</file>

</testsuite></phpunit>
Run Code Online (Sandbox Code Playgroud)

我想在bootstrap.php中访问"bootstrapArg"的值.这可能吗?

谢谢

php phpunit

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

Yii测试。截断外键

在每次测试开始时截断数据库的最佳解决方案是什么?我有带有Foreigh键的InnoDB引擎,无法截断表。

php phpunit unit-testing yii

2
推荐指数
3
解决办法
3103
查看次数

PHPUnit给我autoload.php找不到异常

UPDATE

我已经解决了这个问题,这是所有关于正确的权限app/cacheapp/logs.


当我尝试在symfony2中运行PHPUnit时,使用此命令phpunit -c app/我收到以下错误消息:

PHPUnit 3.7.28 by Sebastian Bergmann.

Configuration read from /var/www/task/app/phpunit.xml.dist

PHP Warning:  Uncaught exception 'PHPUnit_Framework_Error_Warning' with message 'require_once(/var/www/task/vendor/symfony/symfony/vendor/autoload.php): failed to open stream: No such file or directory' in /var/www/task/vendor/symfony/symfony/autoload.php.dist:9 Stack trace:
#0 /var/www/task/vendor/symfony/symfony/autoload.php.dist(9): PHPUnit_Util_ErrorHandler::handleError(2, 'require_once(/v...', '/var/www/task/v...', 9, Array)
#1 /var/www/task/vendor/symfony/symfony/autoload.php.dist(9): require_once()
#2 /var/www/task/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/AppKernel.php(26): require_once('/var/www/task/v...')
#3 /var/www/task/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/WebTestCase.php(47): require_once('/var/www/task/v...')
#4 /var/www/task/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/WebTestCase.php(54): Symfony\Bundle\FrameworkBundle\Tests\Functional\WebTestCase::getKernelClass()
#5 /var/www/task/vendor/symfony/symfon in /var/www/task/vendor/symfony/symfony/autoload.php.dist on line 9 

PHP Stack trace:
PHP   1. {main}() /home/rafael/composer-packages/vendor/phpunit/phpunit/composer/bin/phpunit:0
PHP   2. PHPUnit_TextUI_Command::main() /home/rafael/composer-packages/vendor/phpunit/phpunit/composer/bin/phpunit:63
PHP   3. …
Run Code Online (Sandbox Code Playgroud)

php phpunit autoload symfony composer-php

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

Laravel测试模拟对象方法未找到

好的 - 我的岩石之路进入测试(与laravel)继续...

我已经创建了一个实例和一个'存储库',我现在正在尝试测试它.但是,这样做我得到一个错误,即找不到类中的方法.对我而言意味着至少找到了这门课程.

我在config/app.php中添加了以下内容:

//custom service providers
    'GolfmanagerServiceProvider'
Run Code Online (Sandbox Code Playgroud)

我的服务提供商是:

class GolfmanagerServiceProvider extends ServiceProvider {

    public function register()
    {
        $this->app->bind(
            'golfmanager\service\creator\TicketCreatorInterface', 
            'golfmanager\service\creator\TicketCreator'
        ); 
        }

    }
Run Code Online (Sandbox Code Playgroud)

我的界面是:

interface TicketCreatorInterface {

    public function createTicket($input, $book);
}
Run Code Online (Sandbox Code Playgroud)

我的'存储库' (这是正确的术语吗?):

Class TicketCreator  implements TicketCreatorInterface {

protected $ticket;

public function __construct(TicketAudit $ticketAudit)
{
    $this->ticket = $ticketAudit;
}

public function createTicket($input, $book) {

    $counter = $input['start'];

    while($counter <= $input['end']) {

        $this->$ticket->create(array(
            'ticketnumber'=>$counter,
            'status'=>'unused',
            'active'=>1
            ));

        $this->ticket->book()->associate($book);

    $counter = $counter+1;
    }
}
}
Run Code Online (Sandbox Code Playgroud)

TicketAudit是雄辩的模型

到目前为止我的测试是:

public …
Run Code Online (Sandbox Code Playgroud)

php phpunit mocking laravel laravel-4

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

PHPUnit Mock似乎没有调用公共函数

码:

MyMockClass.php

<?php
class MyMockClass
{
    public function __construct($l)
    {
        // Do nothing with it
    }

    protected function loadData($var)
    {
        // Do something, it doesn't matter what
        return null;
    }

    public function onEvent($key)
    {
        return $this->loadData($key);
    }
}
Run Code Online (Sandbox Code Playgroud)

MockTest.php

<?php
class MockTest extends \PHPUnit_Framework_TestCase
{
    public function testPHPUnitMock()
    {
        $mock = $this->getMockBuilder('MyMockClass')->setConstructorArgs(array(true))->getMock();
        $mock->expects($this->once())->method('loadData')->with('TEST')->will($this >returnValue(true));

        $this->assertEquals(true, $mock->onEvent('TEST'));
    }

}
Run Code Online (Sandbox Code Playgroud)

当我运行此测试时,它失败,输出如下:

PHPUnit_Framework_ExpectationFailedException : Failed asserting that null matches expected true.
Expected :true
Actual   :null
Run Code Online (Sandbox Code Playgroud)

我正在尝试执行onEvent,这反过来执行我嘲笑的功能,并改变了结果.但是这个onEvent功能似乎没有被调用.如果我把mail()(或类似的东西)放入onEvent …

php phpunit unit-testing mocking

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