1

我只是在关注 Omnipay,目的是增加对另一个网关的支持。使用 Composer 安装后,我尝试运行 Paypal(作为示例网关)和 Omnipay Common 测试。使用这两个包,我调整了 bootstrap.php 以便它可以找到作曲家自动加载文件。Paypal 测试运行良好(绿色)。

但是,常见的测试以 1 次失败和 38 次错误失败。所有失败/错误都在 AbstractGatewayTest、AbstractRequestTest、AbstractResponseTest 中。

这让我想知道 PHPUnit 或 Mockery 处理模拟抽象类的方式是否发生了变化。我正在使用 PHPUnit 3.7.34。我最近一直在为 Laravel 项目使用 PHPUnit 4.0.*,但 Omnipay 需要 3.7。

composer.lock 表示我使用的是 Mockery 0.9.0。我正在运行通过 Macports 在 OS X Mavericks 上安装的 php 5.4.*。

任何人都知道什么可能会绊倒我?谢谢!

编辑:示例失败消息:

有 38 个错误:

1) Omnipay\Common\AbstractGatewayTest::testGetShortName
BadMethodCallException: Method Mockery_0_Omnipay_Common_AbstractGateway::getDefaultParameters() does not exist on this mock object

.../vendor/omnipay/common/src/Omnipay/Common/AbstractGateway.php:53
.../vendor/omnipay/common/src/Omnipay/Common/AbstractGateway.php:40
.../vendor/mockery/mockery/library/Mockery/Container.php:426
.../vendor/mockery/mockery/library/Mockery/Container.php:210
.../vendor/mockery/mockery/library/Mockery.php:71
.../vendor/omnipay/common/tests/Omnipay/Common/AbstractGatewayTest.php:12

2) Omnipay\Common\Message\AbstractRequestTest::testInitializeWithParams
Argument 1 passed to Omnipay\Common\Message\AbstractRequest::__construct() must implement interface Guzzle\Http\ClientInterface, none given

.../vendor/omnipay/common/src/Omnipay/Common/Message/AbstractRequest.php:46
.../vendor/mockery/mockery/library/Mockery/Container.php:426
.../vendor/mockery/mockery/library/Mockery/Container.php:210
.../vendor/mockery/mockery/library/Mockery.php:71
.../vendor/omnipay/common/tests/Omnipay/Common/Message/AbstractRequestTest.php:14

其中“...”是我的源代码区域。

4

1 回答 1

0

按照 Adrian Macneil 的建议和解释,我单独检查了 Omnipay 常用文件,单元测试确实运行绿色(成功):

git clone git@github.com:omnipay/common.git
cd common/
composer update --dev && composer dump-autoload
vendor/bin/phpunit 

产量:

PHPUnit 3.7.34 by Sebastian Bergmann.

Configuration read from /Users/ewb/startrib/omnipay/common/phpunit.xml.dist

...............................................................  63 / 161 ( 39%)
............................................................... 126 / 161 ( 78%)
...................................

Time: 94 ms, Memory: 8.00Mb

OK (161 tests, 258 assertions)

作为记录,我调整 bootstrap.php 如下。这允许我在 Composer 将测试作为依赖项包含时运行测试。我对作曲家和 Laravel 都是新手(omnipay 与 Laravel 无关),所以我的方法似乎不是最佳实践。感谢您的建议!

以下版本的bootstrap.php沿着其源代码树(理智限制为 5 级)向上遍历,直到找到包含 vendor/autoload.php 的目录。

<?php

error_reporting(E_ALL | E_STRICT);

// Locate and include the composer autoloader
$sanity = 5;
$dir = realpath(__DIR__);
do {
    $dir = dirname($dir);
    $autoload = $dir.'/vendor/autoload.php';
} while ($sanity-- && !file_exists($autoload));
$autoloader = require $autoload;

// autoload abstract TestCase classes in test directory
$autoloader->add('Omnipay', __DIR__);
于 2014-04-05T18:03:44.683 回答