Contao คือระบบจัดการเนื้อหา PHP แบบโอเพ่นซอร์สสำหรับผู้ที่ต้องการเว็บไซต์ระดับมืออาชีพที่ดูแลรักษาง่าย เยี่ยมชมเว็บไซต์โครงการสำหรับข้อมูลเพิ่มเติม
กรณีทดสอบ Contao จัดเตรียมกรณีทดสอบ PHPUnit พร้อมวิธีที่เป็นประโยชน์สำหรับการทดสอบ Contao รัน php composer.phar require --dev contao/test-case
เพื่อติดตั้งแพ็คเกจแล้วใช้ในคลาสทดสอบของคุณ:
use Contao TestCase ContaoTestCase ;
class MyTest extends ContaoTestCase
{
}
เมธอด getContainerWithContaoConfiguration()
จำลองคอนเทนเนอร์ Symfony ด้วยการกำหนดค่าเริ่มต้นของส่วนขยายหลัก Contao
$ 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 ' )
;
วิธีการนี้จะเพิ่มอะแดปเตอร์ Config โดยอัตโนมัติด้วยการตั้งค่า Contao:
$ 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 );
อะแดปเตอร์ Config ที่กำหนดจะเขียนทับอะแดปเตอร์ Config เริ่มต้น
วิธี 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 ' );
ไดเร็กทอรีจะถูกลบออกโดยอัตโนมัติหลังจากรันการทดสอบแล้ว เพื่อให้สิ่งนี้ได้ผล โปรดตรวจสอบให้แน่ใจว่าได้เรียกเมธอด parent 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 ();
}
}