我的系统有两个PHP解释器.一个是捆绑了操作系统,另一个是通过XAMPP包安装的.我的所有PHP扩展都应用于XAMPP安装,但PHPUnit似乎只运行我的机器附带的PHP版本.
有没有人知道我可以配置或重建PHPUnit的方式,以便它只使用我的XAMPP PHP解释器?
我正在开发基于Yii框架的项目,我们有许多测试,我们以编程方式添加到测试套件中,所以我们没有使用phpunit.xml文件来配置测试.
问题是,如何从代码覆盖率报告中排除某些目录(例如Yii文件夹).我发现的大多数解决方案都基于xml文件中的黑名单/白名单配置选项.
我还发现phpunit命令有--filter选项,但我找不到任何示例如何使用它来排除完整目录(或少数几个).
我有一个奇怪的问题当我parent::setUp()在我的TestCase类上调用单元测试一个类时,我运行phpunit时它会抛出这个错误:
1)MatchRequestRepositoryTest :: test_find_requests_by_match_id ErrorException:session_start():无法发送会话cookie - 已经发送的头文件(输出从/var/www/project.dev/vendor/phpunit/phpunit/PHPUnit/TextUI/TestRunner.php:459开始)
可能是什么问题?谢谢你的帮助.
我正在运行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]可满足.
我试过的解决方案:
有什么建议?非常感谢!
我想创建一个空的测试表.使用来自digitalsandwich的示例,我想要类似于:
require_once 'PHPUnit/Extensions/Database/TestCase.php';
class BankAccountDBTest extends PHPUnit_Extensions_Database_TestCase
{
protected $pdo;
public function __construct()
{
$this->pdo = new PDO('sqlite::memory:');
BankAccount::createTable($this->pdo);
}
protected function getConnection()
{
return $this->createDefaultDBConnection($this->pdo, 'sqlite');
}
protected function getDataSet()
{
return $this->createFlatXMLDataSet(dirname(__FILE__).'/_files/empty-seed.xml');
}
public function testEmptyTableBehavior()
{
// test stuff
}
}
Run Code Online (Sandbox Code Playgroud)
我应该使用与createFlatXMLDataSet()不同的方法吗?要么???
对于我来说,检查PHPUnit我的测试执行是成功还是失败的最佳方法是什么?我试图为我的Selenium窗口截取屏幕截图,但仅在我的测试失败时.我尝试在onNotSuccessfulTest中截取屏幕截图,但是如果我总是在tearDown()中关闭我的窗口(我应该这样做),那么就没有会话可以在我的onNotSuccessfulTest函数中截取屏幕截图.
我正在考虑的解决方案涉及在tearDown中检查测试是成功还是失败,确定是否截取屏幕截图.
我使用PHPUnit 3.6和Facebook的php-webdriver,据我所知,我没有变量captureScreenshotOnFailure.
思考?
我正在使用phpunit测试Zend Framework上的购物车,结帐,付款流程.我正在ShoppingCartController通过向购物车添加产品进行测试,ShoppingCart模型通过将产品ID存储在Zend会话命名空间中来处理产品添加,然后在另一个测试中我想测试产品是否已添加.同一个ShoppingCartModel从同一个Zend Session命名空间变量中检索添加的产品列表.
添加产品测试看起来像这样并且运行良好,并且var_dump($_SESSION)已添加到调试并正确显示产品:
public function testCanAddProductsToShoppingCart() {
$testProducts = array(
array(
"product_id" => "1",
"product_quantity" => "5"
),
array(
"product_id" => "1",
"product_quantity" => "3"
),
array(
"product_id" => "2",
"product_quantity" => "1"
)
);
Ecommerce_Model_Shoppingcart::clean();
foreach ($testProducts as $product) {
$this->request->setMethod('POST')
->setPost(array(
'product_id' => $product["product_id"],
'quantity' => $product["product_quantity"]
));
$this->dispatch($this->getRouteUrl("add_to_shopping_cart"));
$this->assertResponseCode('200');
}
$products = Ecommerce_Model_Shoppingcart::getData();
$this->assertTrue($products[2][0]["product"] instanceof Ecommerce_Model_Product);
$this->assertEquals($products[2][0]["quantity"],
"8");
$this->assertTrue($products[2][1]["product"] instanceof Ecommerce_Model_Product);
$this->assertEquals($products[2][1]["quantity"],
"1");
var_dump($_SESSION);
}
Run Code Online (Sandbox Code Playgroud)
第二个测试尝试通过询问模型来检索产品var_dump($_SESSION),在测试开始时已经为null. …
我如何在phpunit中进行===/strict等于比较?
在我的phpunit中我有这个配置:
<php>
<env name="ENVIRONMENT" value="test"/>
</php>
Run Code Online (Sandbox Code Playgroud)
我在错误的假设下工作,它总是将环境变量设置为值test.然而,当系统已经具有变量集时,则它更喜欢已存在的值.
$ export ENVIRONMENT=GNARF
$ phpunit -c test/phpunit.xml
Run Code Online (Sandbox Code Playgroud)
所以在测试中,即使我预期,它的价值env('ENVIRONMENT')也会"GNARF"如此"test".
有没有办法让phpunit将env设置视为默认值而不是它应该使用的确定值?
我也想避免以某种方式调用phpunit来获得正确的env变量.
所以虽然这有效:
ENVIRONMENT="test";./vendor/bin/phpunit -c tests/phpunit.xml
Run Code Online (Sandbox Code Playgroud)
phpunit.xml如果可能的话,我宁愿在文件中配置它.
PHPUnit让我使用以下任一方法创建方法存根以抛出异常:
[->will($this->throwException(..)][1]->willThrowException(..我需要测试方法存根抛出PHP错误的一些情况.
PHPUnit是否支持这样的东西?这里有变通方法吗?