Amalan terbaik ujian unit corak reka bentuk PHP: Asingkan kebergantungan: Gunakan suntikan kebergantungan atau objek olok-olok untuk mengelakkan gandingan dengan komponen luaran. Uji keadaan sempadan: Pertimbangkan pengecualian, pengendalian ralat dan kes penggunaan tepi untuk memastikan corak reka bentuk berfungsi dengan betul dalam setiap situasi. Merangkumi berbilang senario: Uji variasi dan pelaksanaan yang berbeza untuk merangkumi semua kemungkinan tingkah laku. Ikut prinsip SOLID: Gunakan prinsip seperti tanggungjawab tunggal dan gandingan longgar untuk menulis kod yang boleh diuji dan boleh diselenggara.
Amalan Terbaik Ujian Unit Corak Reka Bentuk PHP
Apabila menulis ujian unit, amalan baik adalah penting untuk memastikan kebolehpercayaan dan kebolehselenggaraan kod anda. Ujian unit amat penting untuk corak reka bentuk yang kompleks dalam PHP. Artikel ini akan memperkenalkan amalan terbaik untuk ujian unit corak reka bentuk PHP dan menggambarkannya melalui kes praktikal.
Asingkan kebergantungan
Sebaik-baiknya, ujian unit perlu dilakukan terhadap satu kelas atau kaedah tanpa kebergantungan pada komponen lain. Untuk corak reka bentuk, ini boleh menjadi tugas yang sukar kerana mereka sering bergantung pada interaksi antara berbilang kelas dan antara muka.
Gunakan rangka kerja suntikan kebergantungan atau objek olok-olok untuk mengasingkan kebergantungan. Contohnya, gunakan [PHPUnit_MockObject](https://phpunit.readthedocs.io/en/latest/fixtures.html#creating-mocks) untuk mencipta objek olok-olok sebagai ganti kebergantungan luaran:
use PHPUnit\Framework\TestCase; use PHPUnit\Framework\MockObject\MockObject; class MyClassTest extends TestCase { /** @var MockObject */ private $mockDependency; protected function setUp(): void { $this->mockDependency = $this->createMock(IDependency::class); } }
Menguji syarat sempadan
Corak Reka Bentuk selalunya mengendalikan tingkah laku yang kompleks dan pengurusan keadaan. Ujian unit harus mempertimbangkan semua keadaan sempadan yang mungkin, termasuk pengecualian, pengendalian ralat dan kes tepi.
Sebagai contoh, semasa menguji kaedah attach
corak Pemerhati, anda hendaklah memastikan bahawa hanya pelanggan yang sah dilampirkan. Uji juga tingkah laku apabila pelanggan cuba melampirkan pada topik yang tidak sah: attach
方法时,应确保仅附加有效的订阅者。还可以测试当订阅者尝试附加到无效主题时的行为:
public function testAttachInvalidSubject() { $observer = new MyObserver(); $mode = 'invalid_mode'; $this->expectException(InvalidArgumentException::class); $observer->attach(new InvalidSubject(), $mode); }
覆盖多种场景
设计模式通常具有多种变体和实现。单元测试应涵盖所有这些不同的场景。
例如,测试策略模式的 execute
public function testExecuteDifferentStrategies() { $context = new Context(); $strategy1 = new Strategy1(); $strategy2 = new Strategy2(); $this->assertEquals('Strategy1 result', $context->execute($strategy1)); $this->assertEquals('Strategy2 result', $context->execute($strategy2)); }
Meliputi berbilang senario
Corak reka bentuk selalunya mempunyai pelbagai variasi dan pelaksanaan. Ujian unit harus meliputi semua senario yang berbeza ini. Sebagai contoh, apabila menguji kaedahexecute
corak strategi, gelagat kelas strategi yang berbeza harus dipertimbangkan. Anda juga boleh menguji perkara yang berlaku apabila anda lulus kelas dasar yang berbeza kepada kaedah pelaksanaan: class SingletonTest extends TestCase { public function testSingletonIsUnique() { $instance1 = Singleton::getInstance(); $instance2 = Singleton::getInstance(); $this->assertSame($instance1, $instance2); } public function testSingletonLazilyInitialized() { $this->assertNull(Singleton::getInstance()); Singleton::getInstance()->setValue('test'); $this->assertEquals('test', Singleton::getInstance()->getValue()); } }
Ikuti prinsip SOLID
Prinsip SOLID ialah lima prinsip pengaturcaraan berorientasikan objek yang boleh membantu menulis kod yang boleh diuji dan boleh diselenggara. Ini amat penting untuk ujian unit corak reka bentuk.Sebagai contoh, ikuti prinsip tanggungjawab tunggal untuk memastikan setiap kaedah ujian hanya menguji satu fungsi tertentu. Selain itu, patuhi prinsip gandingan yang longgar untuk memastikan kebergantungan antara ujian dan kod pengeluaran dikekalkan pada tahap minimum.
Kes praktikal
🎜Mod kes tunggal🎜🎜class ObserverTest extends TestCase { public function testObserverIsNotified() { $subject = new Subject(); $observer = new Observer(); $subject->attach($observer); $subject->setState('new state'); $this->assertEquals('new state', $observer->getState()); } public function testObserverIsDetached() { $subject = new Subject(); $observer = new Observer(); $subject->attach($observer); $subject->detach($observer); $subject->setState('new state'); $this->assertNotEquals('new state', $observer->getState()); } }
Atas ialah kandungan terperinci Amalan terbaik ujian unit corak reka bentuk PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!