unserialize(): ошибка при смещении X из Y байт

#php #phpunit #joomla3.5

#php #phpunit #joomla3.5

Вопрос:

Я пытаюсь создавать тесты, используя PHPUnit в Joomla. После нескольких ошибок это то, что у меня есть:

pathToProject/tests/pruebastests.php:

 <?php   
class PruebasTest extends  PHPUnit_Framework_TestCase
{
    public function testSimple0()
    {
        $a = 3-1;
        $this->assertEquals(2, $a);     
    }

    public function testSimple1()
    {
        $this->assertEquals(2, 1   2);        
    }

    public function testSimple2()
    {
        $this->assertEquals(2, 1 1);        
    }
}
  

когда я запускаю по этому пути:

  phpunit pruebatests.php
  

это выдает мне ошибку:

EF.

Время: 3,18 секунды, объем памяти: 5,75 МБ

Произошла 1 ошибка:

1) PruebasTest::testSimple0 unserialize(): ошибка при смещении 3919 из 8500 байт

Это всегда происходит при первом тестировании, которое он запускает. Я имею в виду, что если я удаляю функцию testSimple0, я получаю ту же ошибку с помощью testSimple1

Я прочитал другие вопросы StackOverflow, связанные с этой ошибкой несериализации, но они мне не помогли.

РЕДАКТИРОВАТЬ: если я попробую это на другом компьютере с другим файлом в том же проекте, ошибка будет:

unserialize(): ошибка при смещении 4189 из 8484 байт

Я понял, что ошибка связана с bootstrap.php:

 <?php

error_reporting(E_ALL);

define('_JEXEC', 1);
define('BASEPATH', realpath(dirname(__FILE__) . '/../'));
define('JOOMLA_PATH', realpath(dirname(__FILE__) . '/../'));
define('JOOMLA_ADMIN_PATH', realpath(dirname(__FILE__) . '/../'));
$_SERVER['HTTP_HOST'] = 'localhost';
$_SERVER['REQUEST_METHOD'] = 'GET';

define('DS', DIRECTORY_SEPARATOR);
if (file_exists(JOOMLA_ADMIN_PATH . '/defines.php'))
{
    include_once JOOMLA_ADMIN_PATH . '/defines.php';
}

if (!defined('_JDEFINES'))
{
    define('JPATH_BASE', JOOMLA_ADMIN_PATH);
    require_once JPATH_BASE . '/includes/defines.php';
}

require_once JPATH_BASE . '/includes/framework.php';
define('JPATH_COMPONENT', JOOMLA_ADMIN_PATH . '/components/com_content');
$app = JFactory::getApplication('administrator');
  

Если я прокомментирую последнюю строку, ошибка исчезнет. Но если я это сделаю, я не смогу создать экземпляр какого-либо контроллера…

Есть идеи? Я использую Joomla 3.5 и PHPUnit 4.8

Комментарии:

1. Я не могу воспроизвести это. Происходит что-то еще, что здесь не показано. Когда я запускаю этот тест, я получаю .F. 1) PruebasTest::testSimple1 Failed asserting that 3 matches expected 2.

2. Попробуйте выполнить обновление до phpunit > 5 github.com/sebastianbergmann/phpunit/issues/1571

3. Результат тот же с 5.6.1

Ответ №1:

Попробуйте очистить кэш. Я столкнулся с такой проблемой. В symfony причиной были старые файлы *.meta в /var/cache

Комментарии:

1. Спасибо за ваш ответ. Я не помню, что я сделал. Это было 6 лет назад. Но, перечитывая вопрос, который я пробовал на 2 разных компьютерах, я не думаю, что проблема была в кэше.