标签: phpunit

PHP的单元测试框架:simpletest,phpunit还是?

我是一个大风扇SimpleTest的,因为这是我所知道的.它对模拟和Web测试提供了出色的支持.

但我总是害怕停滞不前,所以任何引人注目的转变论点都会受到赞赏.

php phpunit unit-testing simpletest

14
推荐指数
1
解决办法
9946
查看次数

如何在没有交互的情况下运行doctrine 2迁移命令行?

如何在没有交互的情况下运行doctrine 2 migration命令?

目前我有以下命令,它运行在我的单元测试的设置上.但它总是提示是/否用户输入,即使我使用--no-interaction选项.

$input = new Symfony\Components\Console\Input\ArrayInput(
        array(
            'migrations:migrate',
            '--configuration' => APPLICATION_PATH . '/../doctrine/migrations.xml',
            '--no-interaction',
            )
        );
$cli->run($input);
Run Code Online (Sandbox Code Playgroud)

php phpunit unit-testing doctrine zend-framework

14
推荐指数
2
解决办法
9236
查看次数

如何通过PEAR安装phpunit后获得phpunit.bat?

我需要一个phpunit.bat来配置我的NetBeans IDE.

我正在使用wamp,我只是使用这些说明通过pear安装phpunit:

在开始使用PEAR之前,通过从http://pear.php.net/go-pear.phar下载最后一个go-pear进行更新并将其保存到:C:\ wamp\bin\php\php5.3.3\PEAR

然后:

cd C:\wamp\bin\php\php5.3.0>
php -d phar.require_hash=0 PEAR/go-pear.phar
pear channel-discover pear.phpunit.de
pear channel-discover components.ez.no
pear channel-discover pear.symfony-project.com
pear install phpunit/PHPUnit
Run Code Online (Sandbox Code Playgroud)

在那之后,我找不到任何phpunit.bat或phpunit.php

如何通过PEAR安装phpunit后获得phpunit.bat(或任何CLI)?

php pear phpunit netbeans

14
推荐指数
1
解决办法
6603
查看次数

使用PHPUnit测试RESTful Web服务

谁能告诉我如何使用PHPUnit测试RESTful Web服务?PHPUnit似乎没有这种能力.

php rest phpunit

14
推荐指数
1
解决办法
9205
查看次数

PHPUnit在实例化之后将类的实例转换为模拟

有没有办法用PHPUnit创建一个mock类,然后我可以使用它的类名创建一个新的实例?

我有一个定义两种方法的接口.就像是:

interface FooInterface {
    function getA();
    function getB();
}
Run Code Online (Sandbox Code Playgroud)

然后我有另一个接受类名的类,创建该类的实例,检查它是否是它所期望的实例(FooInterface),然后在该类上调用两个方法来获取一些信息.

class FooInfo {
    protected $a;
    protected $b;

    public function __construct($fooClass) {
        $foo = new $fooClass;

        if (!($foo instanceof FooInterface)) {
            throw new \Exception();
        }

        $this->a = $foo->getA();
        $this->b = $foo->getB();
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道如何模拟一个对象就好了.问题是,因为这个类接受一个类名,而不是一个对象(它是一个Manager的一部分,根据需要创建给定类的实例),我不能使用普通的模拟对象.

我试着制作一个模拟对象,然后使用该类名.它似乎创造了对象很好,甚至似乎有我嘲笑的功能.但是,它似乎没有遵循我稍后设置的will($ this-> returnValue('myValue'))部分.

public function testConstruct()
{
    $foo = $this->getMockForAbstractClass('Foo', array('getA', 'getB'));
    $foo->expects($this->any())->method->('getA')->will($this->returnValue('a'));
    $foo->expects($this->any())->method->('getB')->will($this->returnValue('b'));

    $copyClass = get_class($foo);
    $copy = new $copyClass();

    // Passes
    $this->assertTrue(method_exists($copy, 'getA');

    // Fails, $copy->getA() returns null.
    $this->assertEquals($copy->getA(), $foo->getA());
}
Run Code Online (Sandbox Code Playgroud)

因此,它确实具有被模拟的函数,但它们都返回null.

有任何想法吗?

php phpunit unit-testing mocking

14
推荐指数
1
解决办法
7093
查看次数

如何使用WAMP安装PHPUnit?

我是一个新手程序员,我已经尝试了一段令人尴尬的长时间来设置PHPUnit并使用WAMP.我已阅读文档并浏览了各种网站,看看我做错了什么,但我放弃了!我需要有人向我解释这个,因为我有点迟钝.

我可能已经看过所有关于如何设置的指南,但请随意将我链接到你认为万无一失的东西!

php phpunit wamp

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

PDOException:使用phpunit时找不到驱动程序

我开始使用laravel 4,我正在尝试开始使用单元测试,这样我就可以让我的生活更轻松.好吧,你们所有人都会猜测我的开发在尝试phpunit测试后并没有变得容易.简单的测试很容易,但是当事情开始变得有点复杂时,它们就不会像我一样.

问题是我进行了简单的测试但是我得到了一些奇怪的错误PDOException: could not find driver.我已经阅读了一些文章并发表了这个主题,但没有解决我的问题.我安装了php5-mysql,当我打电话php -m时说我有PDO和pdo_mysql.我使用的实际命令是php -m |grep -i "pdo",输出是:

PDO
pdo_mysql
Run Code Online (Sandbox Code Playgroud)

好吧,我试图在浏览器中实际测试PDOException类.为此,我将mysql用户密码更改为不正确的密码,并测试了artisan服务器中将发生的情况(使用命令php artisan serve---> 调用http://localhost:8000/).在浏览器中,一切都可以作为魅力,但当我尝试在控制台中调用``phpunit`时,结果并不相同.

我试图看看webserver和cli是否有不同的配置文件,但事实证明文件是相同的.我比较的配置文件是:

对于Web服务器

/etc/php5/apache2/conf.d/20-pdo_mysql.ini
/etc/php5/apache2/conf.d/05-opcache.ini
/etc/php5/apache2/conf.d/20-json.ini
/etc/php5/apache2/conf.d/20-mysql.ini
/etc/php5/apache2/conf.d/20-mysqli.ini
/etc/php5/apache2/conf.d/10-pdo.ini
/etc/php5/apache2/conf.d/20-mcrypt.ini
/etc/php5/apache2/conf.d/20-curl.ini
/etc/php5/apache2/php.ini
Run Code Online (Sandbox Code Playgroud)

用于命令行

/etc/php5/cli/conf.d/20-pdo_mysql.ini
/etc/php5/cli/conf.d/05-opcache.ini
/etc/php5/cli/conf.d/20-json.ini
/etc/php5/cli/conf.d/20-mysql.ini
/etc/php5/cli/conf.d/20-mysqli.ini
/etc/php5/cli/conf.d/10-pdo.ini
/etc/php5/cli/conf.d/20-mcrypt.ini
/etc/php5/cli/conf.d/20-curl.ini
/etc/php5/cli/php.ini
Run Code Online (Sandbox Code Playgroud)

为了比较它我像这样使用diff命令diff -s /path/to/file1 /path/to/file2.

错误看起来像这样:

1) ExampleTest::testBasicExample
PDOException: could not find driver

/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:47
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/Connectors/SQLiteConnector.php:22
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php:59
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php:47
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php:127
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php:63
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/Migrations/DatabaseMigrationRepository.php:167
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/Migrations/DatabaseMigrationRepository.php:135
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php:366
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateCommand.php:93
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateCommand.php:56 …
Run Code Online (Sandbox Code Playgroud)

php mysql phpunit pdo laravel

14
推荐指数
3
解决办法
8507
查看次数

是否可以模拟受保护的属性和方法

是否可以使用PHP Mockery模拟受保护的属性?

我得到了一个带有方法的类,我将其称为"a",它在从同一个类的受保护属性中检索的数组上做了一些魔术.

受保护的属性由另一个方法填充b,在同一个类中.

我想a通过模拟受保护的属性来测试方法,所以我不必b首先使用类方法.

这可能吗?如果没有,我应该重构我的代码吗?或者还有其他方法(考虑最佳实践).

php phpunit protected mocking mockery

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

默认情况下在PHPUnit中运行单个测试套件

我的PHPUnit配置文件有两个测试套件,unitsystem.当我运行测试运行器时vendor/bin/phpunit,它会在两个套件中运行所有测试.我可以使用testsuite标志来定位单个套件:vendor/bin/phpunit --testsuite unit但是我需要将测试运行器配置为unit默认情况下仅运行套件,并且integration仅在使用testsuite标志进行专门调用时运行.

我的配置:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit colors="true">
  <testsuites>
    <testsuite name="unit">
      <directory>tests/Unit</directory>
    </testsuite>
    <testsuite name="integration">
      <directory>tests/Integration</directory>
    </testsuite>
  </testsuites>
  <filter>
    <whitelist>
      <directory suffix=".php">src</directory>
    </whitelist>
  </filter>
  <logging>
    <log type="coverage-clover" target="build/clover.xml"/>
  </logging>
</phpunit>
Run Code Online (Sandbox Code Playgroud)

php phpunit unit-testing

14
推荐指数
2
解决办法
2428
查看次数

找不到PHPUnit类TestCase

我正在创建一个PHP库,并希望开始编写测试.我收到了一个错误Fatal error: Class 'PHPUnit\Framework\TestCase' not found.

我的项目结构是:在我的主目录中,我有composer.json,一个带有我所有类的src /目录,一个带单元/和接受/子目录的tests /目录.我试图运行的测试位于unit /目录中.我使用命令行界面来运行测试,以便在运行时发生错误phpunit tests/unit/testMyClass.php

testMyClass.php看起来像:

<?php
require 'vendor/autoload.php';
use PHPUnit\Framework\TestCase;

class MyClassTest extends TestCase {
    public function testCreateMyClass() {
        // Tests are written here
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

我的composer.json是:

{
    "require-dev": {
        "phpunit/phpunit": "4.8.*"
    }
    "autoload": {
        "classmap": [
            "src/"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

php phpunit composer-php

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