【问题标题】:How to make phpunit @expectedException work with hhvm?如何使 phpunit @expectedException 与 hhvm 一起工作?
【发布时间】:2019-04-13 07:28:29
【问题描述】:

我的项目中有一些 PHPUnit 测试,其中一些使用了@expectedException 功能,如下所示。

/**
 * @expectedException League\OAuth2\Client\Provider\Exception\IdentityProviderException
 **/
public function testExceptionThrownWhenErrorObjectReceived()
{
    ...
}

/**
 * @expectedException League\OAuth2\Client\Provider\Exception\IdentityProviderException
 **/
public function testExceptionThrownWhenOAuthErrorReceived()
{
    ...
}

/**
 * @expectedException UnexpectedValueException
 **/
public function testExceptionThrownWhenAskingForResourceOwner()
{
    ...
}

我在 travis 的帮助下在 PHP 5.6、7.0、7.1 和 7.2 下运行它们没有问题,但 HHVM 失败:

There were 3 errors:
1) Mrjoops\OAuth2\Client\Test\Provider\JiraTest::testExceptionThrownWhenErrorObjectReceived
Mrjoops\OAuth2\Client\Provider\Exception\JiraIdentityProviderException: Validation Failed
2) Mrjoops\OAuth2\Client\Test\Provider\JiraTest::testExceptionThrownWhenOAuthErrorReceived
Mrjoops\OAuth2\Client\Provider\Exception\JiraIdentityProviderException: error_collection
3) Mrjoops\OAuth2\Client\Test\Provider\JiraTest::testExceptionThrownWhenAskingForResourceOwner
UnexpectedValueException: Invalid response received from Authorization Server. Expected JSON.

我使用最新的 PHPUnit 5.7 版本(为了兼容 PHP 5.6)和最新的 HHVM 3.29.1。

Travis 在他们的网站上写道:

请注意,如果你想在 HHVM 上运行 PHPUnit,你必须 在你的 .travis.yml 中明确安装 5.7 版 HHVM 与 PHP7 的兼容性问题

所以我想我没事。

我知道有一个已知问题 (https://github.com/sebastianbergmann/phpunit/issues/1640) 在 PHPUnit 中未解决并已关闭,并且在 HHVM (https://github.com/hhvm/user-documentation/blob/master/guides/hhvm/06-inconsistencies/03-classes-and-objects.md) 中记录了不一致,但我不清楚是否存在解决方法。

这里有详细信息:

提前感谢您的帮助。

【问题讨论】:

    标签: phpunit hhvm


    【解决方案1】:

    你可以尝试使用:

    $this->expectException(UnexpectedValueException::class);
    

    但我想这会引发同样的问题。或者您尝试使用解决方法:

    try {
        doSomething();
    } catch (Exception $ex) {
        $this->assertInstanceOf(UnexpectedValueException::class, $ex);
    }
    $this->fail('Exception did not occur');
    

    但如果 HHVM 是您真正想要/必须支持的东西,我会提出一个问题?许多主要框架和应用程序(composer、symfony 等)都放弃了对它的支持: https://github.com/facebook/hhvm/issues/7198

    【讨论】:

    • 我正在寻找一种解决方法,而您的方法正在运行,谢谢!关于 HHVM 支持,由于我为现有库开发了额外的提供程序,我倾向于与上游库支持的引擎兼容,这就是为什么我也支持 PHP 5.6,即使 PHP 本身不再支持它。
    猜你喜欢
    • 1970-01-01
    • 2015-07-08
    • 2017-02-12
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 2010-10-20
    相关资源
    最近更新 更多