test case
1.0.0
Contao 是一个开源 PHP 内容管理系统,适合那些想要一个易于维护的专业网站的人们。访问项目网站了解更多信息。
Contao 测试用例提供了 PHPUnit 测试用例以及一些用于测试 Contao 的有用方法。运行php composer.phar require --dev contao/test-case
来安装该包,然后在测试类中使用它:
use Contao TestCase ContaoTestCase ;
class MyTest extends ContaoTestCase
{
}
getContainerWithContaoConfiguration()
方法使用 Contao 核心扩展的默认配置模拟 Symfony 容器。
$ container = $ this -> getContainerWithContaoConfiguration ();
echo $ container -> getParameter ( ' contao.upload_path ' ); // will output "files"
您还可以设置项目目录:
$ container = $ this -> getContainerWithContaoConfiguration ( ' /tmp ' );
echo $ container -> getParameter ( ' kernel.project_dir ' ); // will output "/tmp"
echo $ container -> getParameter ( ' kernel.root_dir ' ); // will output "/tmp/app"
echo $ container -> getParameter ( ' kernel.cache_dir ' ); // will output "/tmp/var/cache"
mockContaoFramework)
方法模拟初始化的 Contao 框架。
$ framework = $ this -> mockContaoFramework ();
$ framework
-> expect ( $ this -> atLeastOnce ())
-> method ( ' initialize ' )
;
该方法会自动添加具有 Contao 设置的 Config 适配器:
$ framework = $ this -> mockContaoFramework ();
$ config = $ framework -> getAdapter ( Contao Config::class);
echo $ config -> get ( ' datimFormat ' ); // will output "'Y-m-d H:i'"
您可以选择添加更多适配器作为参数:
$ adapters = [
Contao Config::class => $ configAdapter ,
Contao Encryption::class => $ encryptionAdapter ,
];
$ framework = $ this -> mockContaoFramework ( $ adapters );
给定的配置适配器将覆盖默认的配置适配器。
mockAdapter()
方法将使用给定的方法模拟适配器。
$ adapter = $ this -> mockAdapter ([ ' findById ' ]);
$ adapter
-> method ( ' findById ' )
-> willReturn ( $ model )
;
$ framework = $ this -> mockContaoFramework ([ Contao FilesModel::class => $ adapter ]);
像上面这样具有简单返回值的适配器可以进一步简化:
$ adapter = $ this -> mockConfiguredAdapter ([ ' findById ' => $ model ]);
这段代码的作用与上面的代码完全相同。
mockClassWithProperties()
方法模拟一个使用神奇的__set()
和__get()
方法来管理属性的类。
$ mock = $ this -> mockClassWithProperties ( Contao PageModel::class);
$ mock -> id = 2 ;
$ mock -> title = ' Home ' ;
echo $ mock -> title ; // will output "Home"
如果要模拟的类是只读的,您可以选择将属性作为构造函数参数传递:
$ properties = [
' id ' => 2 ,
' title ' => ' Home ' ,
];
$ mock = $ this -> mockClassWithProperties ( Contao PageModel::class, $ properties );
echo $ mock -> title ; // will output "Home"
如果需要调用原始类的方法,可以将方法名称作为第三个参数传递。生成的模拟对象将是没有给定方法的部分模拟对象。
$ mock = $ this -> mockClassWithProperties ( Contao PageModel::class, [], [ ' getTable ' ]);
$ mock -> id = 2 ;
echo $ mock -> getTable (); // will call the original method
mockTokenStorage()
使用返回 Contao 后端或前端用户的令牌来模拟令牌存储。
$ tokenStorage = $ this -> mockTokenStorage ( Contao BackendUser::class);
$ user = $ tokenStorage -> getToken ()-> getUser ();
getTempDir()
方法根据测试类名称创建临时目录并返回其路径。
$ fs = new Filesystem ();
$ fs -> mkdir ( $ this -> getTempDir (). ' /var/cache ' );
运行测试后,该目录将自动删除。为此,如果您在测试类中定义了该方法,请确保始终调用父tearDownAfterClass()
方法!
use Contao TestCase ContaoTestCase ;
class MyTest extends ContaoTestCase
{
public static function tearDownAfterClass ()
{
// The temporary directory would not be removed without this call!
parent :: tearDownAfterClass ();
}
}