Nehmen wir mal an, unsere Extension hat irgend ein Modul, dem ich in der services.yml ein Cache Objekt übergebe:
Code: Alles auswählen
phpbbde.pastebin.cron.main:
class: phpbbde\pastebin\cron\main
arguments:
- @cache
- @config
- @dbal.conn
- @log
- %phpbbde.pastebin.path%
- %core.root_path%
- %core.php_ext%
calls:
- [set_name, [phpbbde.pastebin.cron.main]]
tags:
- { name: cron.task }
phpbb\cache\service
, der dementsprechend auch im Konstruktor der aufgerufenen Klasse definiert ist:
Code: Alles auswählen
public function __construct(\phpbb\cache\service $cache, \phpbb\config\config $config, \phpbb\db\driver\driver_interface $db, \phpbb\log\log_interface $log, $pastebin_path, $root_path, $php_ext)
\phpbb\cache\driver\driver_interface
, weshalb man es nicht einfach durch das Mock-Objekt ersetzen kann, obwohl es dank __call
sämtliche Aufrufe einfach an den Driver weiterleitet und deshalb genauso agiert wie ein Objekt dieses Typs. Das wiederum führt dazu, dass ich ein neues Objekt vom Typ \phpbb\cache\service
mit Mockobjekten füttern muss, so dass ich es in den Unittests benutzen kann:
Code: Alles auswählen
$cache = new \phpbb\cache\service($this->getMock('\phpbb\cache\driver\driver_interface'), $config, $db, $phpbb_root_path, $phpEx);
\phpbb\cache\driver\driver_interface
Dazugehöriger Travis Build: https://travis-ci.org/gn36/phpbb-ext-pa ... s/50568549
Und die entsprechende Branch: https://github.com/gn36/phpbb-ext-paste ... /dev/tests
Noch eine weitere Frage dazu: Nehmen wir mal an, ich möchte ein paar in der services.yml definierte Parameter mit einem Unittest auf ihre Gültigkeit überprüfen:
Code: Alles auswählen
parameters:
phpbbde.pastebin.path: %core.root_path%ext/phpbbde/pastebin/
phpbbde.pastebin.geshi: %phpbbde.pastebin.path%vendor/easybook/geshi/
phpbbde.pastebin.geshilangs: %phpbbde.pastebin.geshi%geshi/
phpbbde.pastebin.cron.prune_interval: 86400
tables.phpbbde.pastebin.pastebin: %core.table_prefix%pastebin
Code: Alles auswählen
$phpbb_container = new \phpbb_mock_container_builder();
$params = array(
'phpbbde.pastebin.path' => $phpbb_root_path . 'ext/phpbbde/pastebin/',
'phpbbde.pastebin.geshi' => $phpbb_root_path . 'ext/phpbbde/pastebin/' . 'vendor/easybook/geshi/',
'phpbbde.pastebin.geshilangs' => $phpbb_root_path . 'ext/phpbbde/pastebin/' . 'vendor/easybook/geshi/' . 'geshi/',
'phpbbde.pastebin.cron.prune_interval' => 86400,
'tables.phpbbde.pastebin.pastebin' => 'phpbb_pastebin',
);
foreach($params as $name => $value)
{
$phpbb_container->setParameter($name, $value);
}