Omnipay 常见的抽象类测试失败



我只是在看Omnipay,目的是增加对另一个网关的支持。使用 Composer 安装后,我尝试运行 PayPal(作为示例网关)和 Omnipay Common 测试。对于这两个软件包,我调整了引导程序.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。我正在运行通过 Mac ports 在 OS X Mavericks 上安装的 php 5.4.*。

有人知道什么可能会让我绊倒吗?谢谢!

编辑:示例失败消息:

有 38 个错误:

1) OmnipayCommonAbstractGatewayTest::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) OmnipayCommonMessageAbstractRequestTest::testInitializeWithParams
Argument 1 passed to OmnipayCommonMessageAbstractRequest::__construct() must implement interface GuzzleHttpClientInterface, 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

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

按照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)

作为记录,我调整引导程序.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__);

最新更新