我是一个大风扇SimpleTest的,因为这是我所知道的.它对模拟和Web测试提供了出色的支持.
但我总是害怕停滞不前,所以任何引人注目的转变论点都会受到赞赏.
如何在没有交互的情况下运行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) 我需要一个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)?
谁能告诉我如何使用PHPUnit测试RESTful Web服务?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.
有任何想法吗?
我是一个新手程序员,我已经尝试了一段令人尴尬的长时间来设置PHPUnit并使用WAMP.我已阅读文档并浏览了各种网站,看看我做错了什么,但我放弃了!我需要有人向我解释这个,因为我有点迟钝.
我可能已经看过所有关于如何设置的指南,但请随意将我链接到你认为万无一失的东西!
我开始使用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 Mockery模拟受保护的属性?
我得到了一个带有方法的类,我将其称为"a",它在从同一个类的受保护属性中检索的数组上做了一些魔术.
受保护的属性由另一个方法填充b,在同一个类中.
我想a通过模拟受保护的属性来测试方法,所以我不必b首先使用类方法.
这可能吗?如果没有,我应该重构我的代码吗?或者还有其他方法(考虑最佳实践).
我的PHPUnit配置文件有两个测试套件,unit和system.当我运行测试运行器时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库,并希望开始编写测试.我收到了一个错误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)