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

Я хотел бы протестировать свое приложение WordPress, которое вызывает эту функцию https://github.com/Automattic/WPCOM-Related-Posts/blob/master/wpcom-related-posts.php

Я не уверен, как издеваться над этим, потому что WPCom_Related_Posts не имеет пространства имен.

Вот как я использую класс

$related_posts = WPCom_Related_Posts()->get_related_posts( get_queried_object_id(), $args );    

Как мне издеваться над этим get_related_posts в тесте, потому что этот класс будет вызывать Elasticsearch для получения связанных сообщений, и я не хочу настраивать это в PHPUnit


person toy    schedule 30.06.2015    source источник


Ответы (1)


Это довольно просто: так же, как вы издеваетесь над любым другим классом:

$mock = Mockery::mock('WPCom_Related_Posts');
//or, if you want to be explicit:
$mocl = Mockery::mock('\WPCom_Related_Posts');

Существует довольно много документации вместе с примерами по этому поводу, на первом страница, например:

$mock = \Mockery::mock('stdClass');

Это должно было ответить на ваш вопрос (stdClass также не имеет пространства имен (ну, это в глобальном NS).

Не забывайте запускать \Mockery::close(); в конце каждого теста (в tearDown или _after, или как там это называется в используемой тестовой среде). Особенно, когда вы начинаете использовать ожидания

person Elias Van Ootegem    schedule 30.06.2015