我刚刚开始使用PHPUnit,但我遇到了一些麻烦.
我的代码使用$ _SERVER ['DOCUMENT_ROOT']计算包含的路径,当我的apache服务器是运行PHP的服务器时,它运行,但是当我从命令行运行带有"phpunit Tests"的phpunit时,没有设置DOCUMENT_ROOT,所以这些包括不工作.
我在PHPUnit的配置中遗漏了什么?它应该以某种方式与apache集成吗?
使用PHPUnit,测试原始PHP代码非常容易,但是那些严重依赖于cookie的代码呢?会议可能就是一个很好的例子.
有没有一种方法不需要我$_COOKIE在测试期间设置数据?这感觉就像一种做事的hacky方式.
我的系统有两个PHP解释器.一个是捆绑了操作系统,另一个是通过XAMPP包安装的.我的所有PHP扩展都应用于XAMPP安装,但PHPUnit似乎只运行我的机器附带的PHP版本.
有没有人知道我可以配置或重建PHPUnit的方式,以便它只使用我的XAMPP PHP解释器?
考虑
class Foo {
public $att;
public function __construct ( $a ) { $this->att = $a; }
}
class Some {
public function callMe ( Foo $f ) {}
}
// class I want to test
class SuT {
public function testMe ( Some $s ) {
echo $s->callMe( new Foo('hi') );
}
}
Run Code Online (Sandbox Code Playgroud)
我想检查是否Sut::testMe()正确调用Some::callMe().由于参数是一个(Foo)对象(不是标量类型),我无法弄清楚如何调用PHPUnit with()来对其运行断言.assertAttributeEquals例如,有一种方法,但我如何向它提供调用的参数?
我想做的是:
class SuTTest extends PHPUnit_Framework_TestCase {
public function testSuT () {
$stub = $this->getMock( 'Some' …Run Code Online (Sandbox Code Playgroud) 我需要使用Selenium测试Web应用程序.该应用程序在其设置中相当普遍:它需要登录才能公开大部分功能.加载页面后,如果用户未经过身份验证,它将重定向到登录表单,然后在提供凭据后返回到请求的页面.
用Selenium解决这个问题的常用方法是什么?我认为人们没有登录每一次测试,因为这会导致大型测试套件的大量开销.有没有办法在测试中设置会话,然后将cookie信息用于后续测试,或者进行条件登录(不会导致大量代码重复!)?
我正在使用PHPUnit和Selenium ATM.
谢谢!
贡萨洛
我使用它FacebookBundle来验证我的Symfony2应用程序中的用户.但是,我想用phpunit创建功能测试,该测试使用经过身份验证的用户.
此外,我不想使用facebook用户,而是使用一个用户.
有人知道如何实现这个吗?
我正在开发用于测试模型功能的单元测试.
我使用PHP PDO与DBUnit 1.1.2和PHPUnit 3.6.10,我的数据集是一个yml文件.
我需要在数据库中加载灯具时关闭外键检查.之后,我需要再次打开它,以便我可以在这些约束下运行我的测试.
下面是我的通用Testcase文件中的代码片段(不是整个类文件),我将包含在我开发的任何新测试用例中.
当我在这些设置下运行测试用例时,我发现$ pdo-> exec()没有执行.
我的做法有什么问题?还有更好的选择吗?
class MyTestCase extends PHPUnit_Extensions_Database_TestCase {
public function getConnection() {
$this->pdo = $this->getPDO();
echo "BEFORE FOREIGN KEY QUERY\n";
$conn = $this->createDefaultDBConnection($this->pdo, 'my-schema');
$this->pdo->exec("set foreign_key_checks=0");
return $conn;
}
private function getPDO() {
include BASEPATH . '/application/config/database.php';
$dbt = $db['testing'];
$conn_string = sprintf("%s:host=%s;dbname=%s", $dbt['dbdriver'], $dbt['hostname'], $dbt['database']);
$pdo = new PDO($conn_string, $dbt['username'], $dbt['password']);
return $pdo;
}
public function getDataSet() {
echo "BEFORE FOREIGN KEY QUERY in getDataSet\n";
$this->pdo->exec("set foreign_key_checks=1");
return new PHPUnit_Extensions_Database_DataSet_YamlDataSet(ROOTPATH."/application/tests/data/my-dataset.yml");
} …Run Code Online (Sandbox Code Playgroud) 我很想知道在测试类__construct中创建对象是好的做法,还是应该总是使用setup/teardown方法(或setUpBeforeClass/tearDownAfterClass方法)?
我知道每次测试都会调用set/teardown,如果我将objec创建代码放入其中,它会有什么用处吗?例如
//mytestclass.php
class MyTestClass extends PHPUnit_Framework_TestCase
{
private $obj;
protected function setUp()
{
$this->obj = new FooClass();
}
public testFooObj()
{
//assertions for $this->obj
}
...
}
Run Code Online (Sandbox Code Playgroud)
如果我在构造函数中创建对象,可能会出现什么问题:
class MyTestClass extends PHPUnit_Framework_TestCase
{
private $obj;
protected function __construct()
{
$this->obj = new FooClass();
}
public testFooObj()
{
//assertions for $this->obj
}
...
}
Run Code Online (Sandbox Code Playgroud)
我试过谷歌搜索以及PHPUnit文档无法获得太多信息,你能帮我解决哪一个是好的做法?
我正在运行Linux Mint 18.1.我的IDE是PhpStorm,我试图通过作曲家安装PHPUnit.我按照https://getcomposer.org/download/上的安装步骤进行操作.
问题1 - phpunit/phpunit 6.4.x-dev的安装请求 - > phpunit/phpunit [6.4.x-dev]可满足. - phpunit/phpunit 6.4.x-dev需要ext-dom* - >系统中缺少所请求的PHP扩展dom.
问题2 - symfony/symfony v3.3.6需要ext-xml* - >系统中缺少所请求的PHP扩展xml. - symfony/symfony v3.3.6需要ext-xml* - >系统中缺少所请求的PHP扩展xml. - symfony/symfony v3.3.6需要ext-xml* - >系统中缺少所请求的PHP扩展xml. - symfony/symfony的安装请求(锁定在v3.3.6,需要为3.3.*) - > symfony/symfony [v3.3.6]可满足.
我试过的解决方案:
有什么建议?非常感谢!
phpunit ×10
php ×6
unit-testing ×4
symfony ×2
testing ×2
composer-php ×1
cookies ×1
dbunit ×1
foreign-keys ×1
include ×1
magento ×1
open-source ×1
pdo ×1
selenium ×1
session ×1
xampp ×1