SlideShare a Scribd company logo
Модульне
тестування і
PhpUnit
Модульне тестування ...?
Модульне тестування, або юніт-тестування (англ. unit
testing) - процес у програмуванні, що дозволяє перевірити на
коректність окремі модулі вихідного коду програми.
Ідея полягає в тому, щоб писати тести для кожної функції або
методу. Це дозволяє досить швидко перевірити, чи не призвела
чергове зміна коду до до появи помилок у вже відтестованих
місцях програми, а також полегшує виявлення та усунення таких
помилок.
Умови правильних unit тестів
•

Один тест одна умова

•

Правильне ім'я тесту, і правильні імена змінних

•

Ізольованість і незалежність від зовнішніх умов

•

Коментування тестів
PhpUnit
PHPUnit — фреймворк для модульного тестування під час
розробки ПЗ на PHP. PHPUnit розроблений Себастьяном
Бергманом.
Переваги ...
•

PHPUnit – це стандарт юніт тестування в php, більшість фреймворків
використовує його: zend, YII, Symfony

•

PHPUnit - інтегрований з більшістю PHP IDE (Eclipse, Netbeans, Zend
Stuide, PHPStorm)

•

PHPUnit - підтримує логування і code coverage reports

•

Проста інсталяція

•

Велика документація

•

Інтеграція з Селеніумом
Недоліки ...
•

Щоб писати юніт тести потрібно мати навики програмування

•

Вміти розбиратися в чужому коді

•

Нехватає веб інтерфейсу, лише консольний запуск
Альтернатива ?
•

Simple Test
Інсталяція ...
PHPUnit потрібно встановлювати з допомогою
установника PEAR, (Репозиторій розширень та програм
для PHP) який надає систему для поширення PHP
пакетів.
pear config-set auto_discover 1
pear install pear.phpunit.de/PHPUnit
Основні команди
phpunit --help

PHPUnit 3.7.0 by Sebastian Bergmann.Usage:
phpunit [switches] UnitTest [UnitTest.php]
phpunit [switches] <directory>
--log-junit <file> Log test execution in JUnit XML format to file
--log-tap <file> Log test execution in TAP format to file.
--log-json <file> Log test execution in JSON format.
--coverage-clover <file> Generate code coverage report in Clover XML format.
--coverage-html <dir> Generate code coverage report in HTML format.
--coverage-php <file> Serialize PHP_CodeCoverage object to file.
--filter <pattern> Filter which tests to run.--group ... Only runs tests from the specified group
(s).
--repeat <times> Runs the test(s) repeatedly.
--testdox Report test execution progress in TestDox format.
--stop-on-failure Stop execution upon first error or failure.
--stop-on-skipped Stop execution upon first skipped test.
--stop-on-incomplete Stop execution upon first incomplete test.
--debug Display debbuging information during test execution.
The XML Configuration File
<phpunit backupGlobals="true"
backupStaticAttributes="false"
<!--bootstrap="/path/to/bootstrap.php"-->
cacheTokens="true"
colors="false"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
forceCoversAnnotation="false"
mapTestClassNameToCoveredClassName="false"
processIsolation="false"
stopOnError="false"
stopOnFailure="false"
stopOnIncomplete="false"
stopOnSkipped="false"
testSuiteLoaderClass="PHPUnit_Runner_StandardTestSuiteLoader"
Test Suites
<testsuites>
<testsuite name="My Test Suite">
<directory>/path/to/*Test.php files</directory>
<file>/path/to/MyTest.php</file>
<exclude>/path/to/exclude</exclude>
</testsuite>
</testsuites>
Including and Excluding
Files for Code Coverage
<filter>
<blacklist>
<directory suffix=".php">/path/to/files</directory>
<file>/path/to/file</file>
<exclude>
<directory suffix=".php">/path/to/files</directory>
<file>/path/to/file</file>
</exclude>
</blacklist>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">/path/to/files</directory>
<file>/path/to/file</file>
<exclude>
<directory suffix=".php">/path/to/files</directory>
Зв'язки між тестами
<?php
class StackTest extends PHPUnit_Framework_TestCase
{
public function testEmpty()
{
$stack = array();
$this->assertEmpty($stack);
return $stack;
}
/**
* @depends testEmpty
*/
public function testPush(array $stack)
{
array_push($stack, 'foo');
$this->assertEquals('foo', $stack[count($stack)-1]);
Провайдери данних
class DataTest extends PHPUnit_Framework_TestCase
{
/**
* @dataProvider provider
*/
public function testAdd($a, $b, $c)
{
$this->assertEquals($c, $a + $b);
}
public function provider()
{
return array(
array(0, 0, 0),
array(0, 1, 1),
array(1, 0, 1),
array(1, 1, 3)
);
Провайдери данних
phpunit DataTest
PHPUnit 3.7.0 by Sebastian Bergmann.
...F
Time: 0 seconds, Memory: 5.75Mb
There was 1 failure:
1) DataTest::testAdd with data set #3 (1, 1, 3)
Failed asserting that 2 matches expected 3.
/home/sb/DataTest.php:9
Тестування Exceptions
class ExceptionTest extends PHPUnit_Framework_TestCase
{
/**
* @expectedException
InvalidArgumentException
* @expectedExceptionMessage Right Message
*/
public function testExceptionHasRightMessage()
{
throw new InvalidArgumentException(‘Right Message’, 10);
}
/**
* @expectedException InvalidArgumentException
* @expectedExceptionCode 20
Тестування Exceptions
class ExceptionTest extends PHPUnit_Framework_TestCase {
public function testException() {
$value = false;
try {
// ... Код, который вызывает исключение ...
}
catch (InvalidArgumentException $expected) {
$value = true;
}
$this->assertTrue($value);
Asserts
•
•
•
•
•
•
•
•
•
•
•
•
•

assertArrayHasKey()
assertContains()
assertCount()
assertEmpty()
assertEquals()
assertFalse()
assertGreaterThan()
assertGreaterThanOrEqual()
assertInstanceOf()
assertLessThan()
assertLessThanOrEqual()
assertNull()
assertRegExp()
Incomplete and Skipped Tests
class SampleTest extends PHPUnit_Framework_TestCase
{
public function testSomething()
{
// Optional: Test anything here, if you want.
$this->assertTrue(TRUE, 'This should already work.');
// Stop here and mark this test as incomplete.
$this->markTestIncomplete(
'This test has not been implemented yet.'
);
}
Incomplete and Skipped Tests
class DatabaseTest extends PHPUnit_Framework_TestCase
{
protected function setUp()
{
if (!extension_loaded('mysqli')) {
$this->markTestSkipped(
'The MySQLi extension is not available.'
);
}
}
public function testConnection()
{
Дякую за увагу :)

Тренінг провів:
Музичишин Ярослав

More Related Content

PPTX
cpp-2013 #16 Automated testing
PPTX
1111
PPTX
QA Fest 2015. Ярослав Пернеровский. Мутанты наступают - смогут ли ваши тесты...
PDF
Oleksij burdin, baq
PPTX
PDF
iPhone Objective-C Development (ukr) (2009)
PPTX
Net framework і c# module 5
PDF
Тестування при розробці програмного забезпечення. Unit Tests.
cpp-2013 #16 Automated testing
1111
QA Fest 2015. Ярослав Пернеровский. Мутанты наступают - смогут ли ваши тесты...
Oleksij burdin, baq
iPhone Objective-C Development (ukr) (2009)
Net framework і c# module 5
Тестування при розробці програмного забезпечення. Unit Tests.

Viewers also liked (14)

PDF
PDF
Останні офіційні оновлення алгоритму Google (літо 2012). Мар'яна Онисько
PDF
Continious integration jet brains teamcity. Віталій Галушка
PDF
Маркетингова стратегія 8 з 10 Юра Стах
PDF
Вебинар по Yaware. Оля Трофімова
PDF
Особливості міграції на/з Magento. Петро Комар
PDF
SMM - Dima Lazarchuk
PDF
Мария Шабаршина - Перелинковка
PDF
Celoxis Brochure
PDF
Архітектура типових рішень з використанням Api2cart Юрій Кріль
PPTX
Skills You Need to Be a Video Game Developer
PDF
Яндекс.метрика Vs Google analytics. Олена Кучаба
PPTX
3 Steps to Become a Medical Assistant
Останні офіційні оновлення алгоритму Google (літо 2012). Мар'яна Онисько
Continious integration jet brains teamcity. Віталій Галушка
Маркетингова стратегія 8 з 10 Юра Стах
Вебинар по Yaware. Оля Трофімова
Особливості міграції на/з Magento. Петро Комар
SMM - Dima Lazarchuk
Мария Шабаршина - Перелинковка
Celoxis Brochure
Архітектура типових рішень з використанням Api2cart Юрій Кріль
Skills You Need to Be a Video Game Developer
Яндекс.метрика Vs Google analytics. Олена Кучаба
3 Steps to Become a Medical Assistant
Ad

Similar to Php unit. Y. Muzychushun (6)

ODP
Phpunit модульне тестування
PPTX
природна і економна дорожня карта для переходу команди розробки на тест центр...
PDF
Тестування з допомогою PHPUnit
PPTX
Code driven testing (UA)
PPTX
Code driven testing -- oleksandr pavlyshak
PPTX
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)
Phpunit модульне тестування
природна і економна дорожня карта для переходу команди розробки на тест центр...
Тестування з допомогою PHPUnit
Code driven testing (UA)
Code driven testing -- oleksandr pavlyshak
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)
Ad

More from HRdepartment (18)

PDF
Юзабіліті в сучасному дизайні. Сергій Ганжа
PDF
Чому юзабіліті. Мар'яна Онисько
PDF
Тренінг дизайн. Максим Орловський
PDF
Cтрах кращий друг і підступний ворог. Cергій Кутузов
PDF
Секрети англ. копірайтингу. Марічка Балук
PDF
Самомотивація. Сергій Кутузов
PDF
Проект Api2cart. Петро Комар
PDF
Прийняття рішень. Анатолій Денис
PDF
Основи письмових комунікацій. Сергій Кутузов
PDF
Основи Html. Сергій Жуков
PDF
Новий Контейнер міграції С2С. Віктор Твердун
PDF
Маркетингова Стратегія 8 з 10. Юра Стах
PDF
Контентна стратегія просування іт продукту. Галя Єфимчук
PDF
Веб аналітика типові задачі та методи вирішень. Мар'яна Онисько
PDF
Social media marketing. Галя Вільчинська
PDF
Bootstrap3 Тарас Мудрий
PDF
Шаблон для презентацій
PPT
Tehnika vedennya-peregovoriv ruslan
Юзабіліті в сучасному дизайні. Сергій Ганжа
Чому юзабіліті. Мар'яна Онисько
Тренінг дизайн. Максим Орловський
Cтрах кращий друг і підступний ворог. Cергій Кутузов
Секрети англ. копірайтингу. Марічка Балук
Самомотивація. Сергій Кутузов
Проект Api2cart. Петро Комар
Прийняття рішень. Анатолій Денис
Основи письмових комунікацій. Сергій Кутузов
Основи Html. Сергій Жуков
Новий Контейнер міграції С2С. Віктор Твердун
Маркетингова Стратегія 8 з 10. Юра Стах
Контентна стратегія просування іт продукту. Галя Єфимчук
Веб аналітика типові задачі та методи вирішень. Мар'яна Онисько
Social media marketing. Галя Вільчинська
Bootstrap3 Тарас Мудрий
Шаблон для презентацій
Tehnika vedennya-peregovoriv ruslan

Php unit. Y. Muzychushun

  • 2. Модульне тестування ...? Модульне тестування, або юніт-тестування (англ. unit testing) - процес у програмуванні, що дозволяє перевірити на коректність окремі модулі вихідного коду програми. Ідея полягає в тому, щоб писати тести для кожної функції або методу. Це дозволяє досить швидко перевірити, чи не призвела чергове зміна коду до до появи помилок у вже відтестованих місцях програми, а також полегшує виявлення та усунення таких помилок.
  • 3. Умови правильних unit тестів • Один тест одна умова • Правильне ім'я тесту, і правильні імена змінних • Ізольованість і незалежність від зовнішніх умов • Коментування тестів
  • 4. PhpUnit PHPUnit — фреймворк для модульного тестування під час розробки ПЗ на PHP. PHPUnit розроблений Себастьяном Бергманом.
  • 5. Переваги ... • PHPUnit – це стандарт юніт тестування в php, більшість фреймворків використовує його: zend, YII, Symfony • PHPUnit - інтегрований з більшістю PHP IDE (Eclipse, Netbeans, Zend Stuide, PHPStorm) • PHPUnit - підтримує логування і code coverage reports • Проста інсталяція • Велика документація • Інтеграція з Селеніумом
  • 6. Недоліки ... • Щоб писати юніт тести потрібно мати навики програмування • Вміти розбиратися в чужому коді • Нехватає веб інтерфейсу, лише консольний запуск
  • 8. Інсталяція ... PHPUnit потрібно встановлювати з допомогою установника PEAR, (Репозиторій розширень та програм для PHP) який надає систему для поширення PHP пакетів. pear config-set auto_discover 1 pear install pear.phpunit.de/PHPUnit
  • 9. Основні команди phpunit --help PHPUnit 3.7.0 by Sebastian Bergmann.Usage: phpunit [switches] UnitTest [UnitTest.php] phpunit [switches] <directory> --log-junit <file> Log test execution in JUnit XML format to file --log-tap <file> Log test execution in TAP format to file. --log-json <file> Log test execution in JSON format. --coverage-clover <file> Generate code coverage report in Clover XML format. --coverage-html <dir> Generate code coverage report in HTML format. --coverage-php <file> Serialize PHP_CodeCoverage object to file. --filter <pattern> Filter which tests to run.--group ... Only runs tests from the specified group (s). --repeat <times> Runs the test(s) repeatedly. --testdox Report test execution progress in TestDox format. --stop-on-failure Stop execution upon first error or failure. --stop-on-skipped Stop execution upon first skipped test. --stop-on-incomplete Stop execution upon first incomplete test. --debug Display debbuging information during test execution.
  • 10. The XML Configuration File <phpunit backupGlobals="true" backupStaticAttributes="false" <!--bootstrap="/path/to/bootstrap.php"--> cacheTokens="true" colors="false" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" forceCoversAnnotation="false" mapTestClassNameToCoveredClassName="false" processIsolation="false" stopOnError="false" stopOnFailure="false" stopOnIncomplete="false" stopOnSkipped="false" testSuiteLoaderClass="PHPUnit_Runner_StandardTestSuiteLoader"
  • 11. Test Suites <testsuites> <testsuite name="My Test Suite"> <directory>/path/to/*Test.php files</directory> <file>/path/to/MyTest.php</file> <exclude>/path/to/exclude</exclude> </testsuite> </testsuites>
  • 12. Including and Excluding Files for Code Coverage <filter> <blacklist> <directory suffix=".php">/path/to/files</directory> <file>/path/to/file</file> <exclude> <directory suffix=".php">/path/to/files</directory> <file>/path/to/file</file> </exclude> </blacklist> <whitelist processUncoveredFilesFromWhitelist="true"> <directory suffix=".php">/path/to/files</directory> <file>/path/to/file</file> <exclude> <directory suffix=".php">/path/to/files</directory>
  • 13. Зв'язки між тестами <?php class StackTest extends PHPUnit_Framework_TestCase { public function testEmpty() { $stack = array(); $this->assertEmpty($stack); return $stack; } /** * @depends testEmpty */ public function testPush(array $stack) { array_push($stack, 'foo'); $this->assertEquals('foo', $stack[count($stack)-1]);
  • 14. Провайдери данних class DataTest extends PHPUnit_Framework_TestCase { /** * @dataProvider provider */ public function testAdd($a, $b, $c) { $this->assertEquals($c, $a + $b); } public function provider() { return array( array(0, 0, 0), array(0, 1, 1), array(1, 0, 1), array(1, 1, 3) );
  • 15. Провайдери данних phpunit DataTest PHPUnit 3.7.0 by Sebastian Bergmann. ...F Time: 0 seconds, Memory: 5.75Mb There was 1 failure: 1) DataTest::testAdd with data set #3 (1, 1, 3) Failed asserting that 2 matches expected 3. /home/sb/DataTest.php:9
  • 16. Тестування Exceptions class ExceptionTest extends PHPUnit_Framework_TestCase { /** * @expectedException InvalidArgumentException * @expectedExceptionMessage Right Message */ public function testExceptionHasRightMessage() { throw new InvalidArgumentException(‘Right Message’, 10); } /** * @expectedException InvalidArgumentException * @expectedExceptionCode 20
  • 17. Тестування Exceptions class ExceptionTest extends PHPUnit_Framework_TestCase { public function testException() { $value = false; try { // ... Код, который вызывает исключение ... } catch (InvalidArgumentException $expected) { $value = true; } $this->assertTrue($value);
  • 19. Incomplete and Skipped Tests class SampleTest extends PHPUnit_Framework_TestCase { public function testSomething() { // Optional: Test anything here, if you want. $this->assertTrue(TRUE, 'This should already work.'); // Stop here and mark this test as incomplete. $this->markTestIncomplete( 'This test has not been implemented yet.' ); }
  • 20. Incomplete and Skipped Tests class DatabaseTest extends PHPUnit_Framework_TestCase { protected function setUp() { if (!extension_loaded('mysqli')) { $this->markTestSkipped( 'The MySQLi extension is not available.' ); } } public function testConnection() {
  • 21. Дякую за увагу :) Тренінг провів: Музичишин Ярослав