SlideShare ist ein Scribd-Unternehmen logo
1 von 21
Downloaden Sie, um offline zu lesen
Модульне
тестування і
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()
{
Дякую за увагу :)

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

Weitere ähnliche Inhalte

Andere mochten auch

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

Andere mochten auch (14)

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

Ähnlich wie Php unit. Y. Muzychushun

[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)Exoft LLC
 
Phpunit модульне тестування
Phpunit модульне тестуванняPhpunit модульне тестування
Phpunit модульне тестуванняVladimir Maslechkin
 
12 - gradle. evoliutsiia system avtomatychnoi zbirky - sviatoslav babych - it...
12 - gradle. evoliutsiia system avtomatychnoi zbirky - sviatoslav babych - it...12 - gradle. evoliutsiia system avtomatychnoi zbirky - sviatoslav babych - it...
12 - gradle. evoliutsiia system avtomatychnoi zbirky - sviatoslav babych - it...Igor Bronovskyy
 
Anton Serputko Start performance-testing-from-scratch, BAQ
Anton Serputko Start performance-testing-from-scratch, BAQAnton Serputko Start performance-testing-from-scratch, BAQ
Anton Serputko Start performance-testing-from-scratch, BAQDakiry
 
Тестування з допомогою PHPUnit
Тестування з допомогою PHPUnitТестування з допомогою PHPUnit
Тестування з допомогою PHPUnitAndriy Nasinnyk
 
МИХАЙЛО БОДНАРЧУК «Як перестати боятись та полюбити автотести на JavaScript» ...
МИХАЙЛО БОДНАРЧУК «Як перестати боятись та полюбити автотести на JavaScript» ...МИХАЙЛО БОДНАРЧУК «Як перестати боятись та полюбити автотести на JavaScript» ...
МИХАЙЛО БОДНАРЧУК «Як перестати боятись та полюбити автотести на JavaScript» ...GoQA
 
QA Fest 2016. Яна Кокряшкіна. Паралельний запуск автоматизованих тестів за до...
QA Fest 2016. Яна Кокряшкіна. Паралельний запуск автоматизованих тестів за до...QA Fest 2016. Яна Кокряшкіна. Паралельний запуск автоматизованих тестів за до...
QA Fest 2016. Яна Кокряшкіна. Паралельний запуск автоматизованих тестів за до...QAFest
 
урок№3 паскаль
урок№3 паскальурок№3 паскаль
урок№3 паскальuchitel18
 
Code driven testing -- oleksandr pavlyshak
Code driven testing -- oleksandr pavlyshakCode driven testing -- oleksandr pavlyshak
Code driven testing -- oleksandr pavlyshakIgor Bronovskyy
 
CoreCamp "Automated testing basics for developers"
CoreCamp "Automated testing basics for developers"CoreCamp "Automated testing basics for developers"
CoreCamp "Automated testing basics for developers"Bohdan Pashkovskyi
 
13 testing
13 testing13 testing
13 testingeleksdev
 
Isa88 основа стандарту інтегрованого виробництва
Isa88 основа стандарту інтегрованого виробництваIsa88 основа стандарту інтегрованого виробництва
Isa88 основа стандарту інтегрованого виробництваПупена Александр
 
07 - vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...
07 -  vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...07 -  vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...
07 - vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...Igor Bronovskyy
 
McAfee ENS 10.7 - що нового ?
McAfee ENS 10.7 - що нового ?McAfee ENS 10.7 - що нового ?
McAfee ENS 10.7 - що нового ?Vladyslav Radetsky
 
01 c# basics
01 c# basics01 c# basics
01 c# basicseleksdev
 

Ähnlich wie Php unit. Y. Muzychushun (20)

[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)
 
Automated testing
Automated testingAutomated testing
Automated testing
 
Phpunit модульне тестування
Phpunit модульне тестуванняPhpunit модульне тестування
Phpunit модульне тестування
 
Tdd, ти де?
Tdd, ти де?Tdd, ти де?
Tdd, ти де?
 
12 - gradle. evoliutsiia system avtomatychnoi zbirky - sviatoslav babych - it...
12 - gradle. evoliutsiia system avtomatychnoi zbirky - sviatoslav babych - it...12 - gradle. evoliutsiia system avtomatychnoi zbirky - sviatoslav babych - it...
12 - gradle. evoliutsiia system avtomatychnoi zbirky - sviatoslav babych - it...
 
Anton Serputko Start performance-testing-from-scratch, BAQ
Anton Serputko Start performance-testing-from-scratch, BAQAnton Serputko Start performance-testing-from-scratch, BAQ
Anton Serputko Start performance-testing-from-scratch, BAQ
 
Тестування з допомогою PHPUnit
Тестування з допомогою PHPUnitТестування з допомогою PHPUnit
Тестування з допомогою PHPUnit
 
МИХАЙЛО БОДНАРЧУК «Як перестати боятись та полюбити автотести на JavaScript» ...
МИХАЙЛО БОДНАРЧУК «Як перестати боятись та полюбити автотести на JavaScript» ...МИХАЙЛО БОДНАРЧУК «Як перестати боятись та полюбити автотести на JavaScript» ...
МИХАЙЛО БОДНАРЧУК «Як перестати боятись та полюбити автотести на JavaScript» ...
 
Code driven testing (UA)
Code driven testing (UA)Code driven testing (UA)
Code driven testing (UA)
 
QA Fest 2016. Яна Кокряшкіна. Паралельний запуск автоматизованих тестів за до...
QA Fest 2016. Яна Кокряшкіна. Паралельний запуск автоматизованих тестів за до...QA Fest 2016. Яна Кокряшкіна. Паралельний запуск автоматизованих тестів за до...
QA Fest 2016. Яна Кокряшкіна. Паралельний запуск автоматизованих тестів за до...
 
урок№3 паскаль
урок№3 паскальурок№3 паскаль
урок№3 паскаль
 
Code driven testing -- oleksandr pavlyshak
Code driven testing -- oleksandr pavlyshakCode driven testing -- oleksandr pavlyshak
Code driven testing -- oleksandr pavlyshak
 
CoreCamp "Automated testing basics for developers"
CoreCamp "Automated testing basics for developers"CoreCamp "Automated testing basics for developers"
CoreCamp "Automated testing basics for developers"
 
Design patterns part 1
Design patterns part 1Design patterns part 1
Design patterns part 1
 
cpp-2013 #20 Best practices
cpp-2013 #20 Best practicescpp-2013 #20 Best practices
cpp-2013 #20 Best practices
 
13 testing
13 testing13 testing
13 testing
 
Isa88 основа стандарту інтегрованого виробництва
Isa88 основа стандарту інтегрованого виробництваIsa88 основа стандарту інтегрованого виробництва
Isa88 основа стандарту інтегрованого виробництва
 
07 - vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...
07 -  vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...07 -  vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...
07 - vysnovky z tdd, pohliad pochatkivtsia - vitalii zinchenko it event 2013...
 
McAfee ENS 10.7 - що нового ?
McAfee ENS 10.7 - що нового ?McAfee ENS 10.7 - що нового ?
McAfee ENS 10.7 - що нового ?
 
01 c# basics
01 c# basics01 c# basics
01 c# basics
 

Mehr von HRdepartment

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

Mehr von HRdepartment (18)

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