Как заставить phpunit @expectedException работать с hhvm? - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть несколько тестов 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.

Трэвис написал на своем сайте об этом:

Обратите внимание, что если вы хотите запустить PHPUnit на HHVM, вы должны явно установите версию 5.7 в свой .travis.yml из-за проблема совместимости между 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),, но мне не ясно, существует ли обходной путь.

Подробности доступны здесь:

Заранее благодарю за помощь.

1 Ответ

0 голосов
/ 10 ноября 2018

Вы можете попробовать использовать:

$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

...