Как я могу издеваться над методом, который не определен в интерфейсе? - PullRequest
0 голосов
/ 26 июня 2019

В моем php-файле я использую Zend\Cache\Storage\StorageInterface. Я связал этот интерфейс с кешем Zend \ filesystem. Я должен тестировать основной файл php. Проблема в том, что StorageInterface не определяет метод сброса. Файловая система имеет метод сброса из другого интерфейса.

В моем модульном тестировании я пытаюсь смоделировать StorageInterface, но проблема в том, что он выдает ошибку о том, что сброс не определен. Как я могу заглушить метод сброса?

Переплет:

$container->bindIf(
            "Zend\\Cache\\Storage\\StorageInterface",
            function () {
                $directoryPath = "/tmp/zend_report_cache";
                if (!file_exists($directoryPath) && !mkdir($directoryPath)) {
                    throw new Exception("Failed to create directory [directoryPath=$directoryPath]");
                }
                return \Zend\Cache\StorageFactory::factory(array(
                    'adapter' => array(
                        'name' => 'filesystem',
                        'options' => array(
                            'cache_dir' => $directoryPath
                        ),
                    ),
                    'plugins' => array('serializer'),
                ));
            }
        );

Main.php (отображается только соответствующий код

use Zend\Cache\Storage\StorageInterface;

public function __destruct()
{
    $this->cache->flush();
}

файл модульного теста

private function getCacheMock()
    {
$cacheMock = $this->setMethods(['execute'])->createMock(StorageInterface::class);
        $cacheMock->expects($this->at(0))->method('setItem')->with(CsvReport::HEADER_CACHE_KEY, []);
        $cacheMock->expects($this->at(1))->method('getItem')->with(CsvReport::HEADER_CACHE_KEY)->willReturn([]);
        $cacheMock->expects($this->at(2))->method('setItem')->with(CsvReport::HEADER_CACHE_KEY, ['key1', 'key2', 'key3']);
        $cacheMock->expects($this->at(3))->method('setItem')->with(0, $this->getMockRow(0));
        $cacheMock->expects($this->at(4))->method('getItem')->with(CsvReport::HEADER_CACHE_KEY)->willReturn(['key1', 'key2', 'key3']);
        $cacheMock->expects($this->at(5))->method('setItem')->with(CsvReport::HEADER_CACHE_KEY, ['key1', 'key2', 'key3', 'key4']);
        $cacheMock->expects($this->at(6))->method('setItem')->with(1, $this->getMockRow(1));
        $cacheMock->expects($this->at(7))->method('getItem')->with(CsvReport::HEADER_CACHE_KEY)->willReturn(['key1', 'key2', 'key3', 'key4']);
        $cacheMock->expects($this->at(8))->method('setItem')->with(CsvReport::HEADER_CACHE_KEY, ['key1', 'key2', 'key3', 'key4', 'key5']);
        $cacheMock->expects($this->at(9))->method('setItem')->with(2, $this->getMockRow(2));
        return $cacheMock;
    }

Ошибка: Попытка настроить метод "сброс", который не может быть настроен, потому что он не существует, не был указан, является окончательным или является статическим

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...