Рассмотрим процесс тестирования приватного метода на простом примере. Нам нужно протестировать метод myPrivateMethod класса MyClass. Протестируем приватный метод класса с передачей в него параметров. Пусть наш тестируемый класс выглядит так:
Class MyClass() { private myPrivateMethod($param1, $param2) { return $param1 * $param2; } }
Тогда тест приватного метода с использованием рефлексии может быть написан следующим образом:
class MyClassTest extends PHPUnit_Extensions_Database_TestCase { public function testMyPrivateMethod() { $class = new ReflectionClass('MyClass'); $method = $class->getMethod('myPrivateMethod'); $method->setAccessible(true); $obj = new MyClass(); $result = $method->invoke($obj, 2, 10); $this->assertEquals(20, $result); $result = $method->invoke($obj, 2, 0); $this->assertEquals(0, $result); } }
Мы получили приватный метод класса с помощью reflection класса, сделали его публичным setAccessible(true).
Затем вызываем этот метод (myPrivateMethod) с передачей в него параметров $result = $method->invoke($obj, 2, 10); В метод
invoke первым параметром передаётся объект класса, а остальные параметры (2,10)
– передадутся как параметры в метод $method.
Следующая строчка кода вызывает приватный метод myPrivateMethod класса MyClass с параметрами $param1=2 и $param2=10.
$result = $method->invoke($obj, 2, 10);
Все типы assert`ов в phpunit. Assertions:
- assertArrayHasKey()
- assertClassHasAttribute()
- assertClassHasStaticAttribute()
- assertContains()
- assertContainsOnly()
- assertContainsOnlyInstancesOf()
- assertCount()
- assertEmpty()
- assertEqualXMLStructure()
- assertEquals()
- assertFalse()
- assertFileEquals()
- assertFileExists()
- assertGreaterThan()
- assertGreaterThanOrEqual()
- assertInstanceOf()
- assertInternalType()
- assertJsonFileEqualsJsonFile()
- assertJsonStringEqualsJsonFile()
- assertJsonStringEqualsJsonString()
- assertLessThan()
- assertLessThanOrEqual()
- assertNull()
- assertObjectHasAttribute()
- assertRegExp()
- assertStringMatchesFormat()
- assertStringMatchesFormatFile()
- assertSame()
- assertSelectCount()
- assertSelectEquals()
- assertSelectRegExp()
- assertStringEndsWith()
- assertStringEqualsFile()
- assertStringStartsWith()
- assertTag()
- assertThat()
- assertTrue()
- assertXmlFileEqualsXmlFile()
- assertXmlStringEqualsXmlFile()
- assertXmlStringEqualsXmlString()
Пример тестирование метода, который должен выкинуть Exception, ожидание определённого Exception:
/** * @expectedException Core_Exception * @expectedExceptionMessage Router hz_hz_hz not registered in container */ public function testGetUnregisteredRouterThrowException() { $router = TaskQueue_Router_Container::getRouter('hz_hz_hz'); }
Как запретить phpunit тестировать конкретный метод (skip method test)?
public function testGetUnregisteredRouterThrowException() { return $this->markTestSkipped(); $router = TaskQueue_Router_Container::getRouter('hz_hz_hz'); }
Передача аргументов в тестируемый метод. Функция testActualIp будет вызвана столько раз, сколько наборов данных есть в функции, указанной с помощью ключевого слова @dataProvider:
/** * @dataProvider forwardedIpsProvider */ public function testActualIp($env, $server, $actualIp) { $request = new Http_Request(array(), array(), array(), $server, $env); $this->assertEquals($actualIp, $request->getActualClientIP()); } public function forwardedIpsProvider() { return array( array( 'ENV' => array( 'HTTP_X_REAL_IP' => '129.78.138.66', ), 'SERVER' => array( 'REMOTE_ADDR' => '127.0.0.1', ), 'actualIp' => '129.78.138.66', ), array( 'ENV' => array( 'HTTP_X_FORWARDED_FOR' => '129.78.138.66, 129.78.64.103, 129.78.64.182', ), 'SERVER' => array( 'REMOTE_ADDR' => '127.0.0.1', ), 'actualIp' => '129.78.138.66', ), ); }
И последнее. Пишите код и тесты без ошибок, тогда ваши тесты будут проходить так:
Комментарии 80
о чем тут думть, протестируй меня, ребята говорят я классная
Личные вопросы можете задавать на email или в skype http://jeka.by/feedback
Спасибо!
Судя по твоей аве и статусу, тебя больше интересует не программирование, скорее всего ты ошиблась сайтом.
class SkolzkiyShlang( kuda ){
}
____________________$$$$______________$$$$$
_______________$$$$$_______________________$$$$$
___________$$$$______$$$$$$$______$$$$$$$$______$$$
_________$$$_______$$______$$____$$______$$_______$$$
_______$$$________$$________$$__$$________$$________$$$
_____$$$_________$$__________$$$$__________$$_________$$$
____$$$__________$$__________$$$$__________$$__________$$$
___$$$__________$$____$$$$$$$_$$_$$$$$$$____$$__________$$$
__$$$___________$$___$$$$$$$$$$$$$$$$$$$$___$$___________$$$
_$$$____________$$__$$$$$$$$$$$$$$$$$$$$$$__$$____________$$$
$$$_____________$$__$$$$$$$$$$$$$$$$$$$$$$__$$_____________$$$
$$$_____________$$__$$$$$$$$$$$$$$$$$$$$$$__$$_____________$$$
$$$_____________$$___$$$$$$$$$$$$$$$$$$$$$__$$_____________$$$
$$$______$$______$$$$$$$$$$$$$$$$$$$$$$$$$$$$_______$$_____$$$
$$$___$$$$$_________________________________________$$$$___$$$
_$$$______$$_________________$$_$$__________________$$_____$$$
__$$$______$$$________________$_$_______________$$$______$$$
___$$$_______$$$_____________________________$$$________$$$
____$$$________$$$$$______________________$$$$$________$$$
_____$$$___________$$$$$$____________$$$$$$___________$$$
_______$$$______________$$$$$$$$$$$$$$$_____________$$$
_________$$$$____________________________________$$$$
____________$$$$______________________________$$$$
________________$$$$$_____________________$$$$$
____________________$$$$$$$_________$$$$$$$
___________________________$$$$$$$$$$
_________________________;__________`_\/\,._
________________________:_______________`_\,/_
________________________|__________________/_
________________________;_________________:_
________________________:__________________;_
______________________|______,---.______/_
_____________________:_____,'_____`,-.__\_
_____________________;____(___o____\___`'_
_____________ _______:______.______,'__o_;_
___________________/,.`______`.__,'`-.__,_
___________________\___________________\_
__________________,'__/_`,__________`.,'_
_______________,'`-.__\_/_`,._________;_
___________;_,'______`-.`-'./_`--.____)_
______,-'____________,--\^-'_
____,:___________,-'_____\_
___(,'_____`--.__\;-._____;_
___:____Y______`-/____`,__:_
___:____:_______:_____/_;'_
___:____:_______|____:_
____\____\______:____:_
_____`-.__`-.__,_\____`._
________\___\__`._\_____`._
______,-;____\---)_\_,','/_
______\__`---'--'"_,'^-;'_
______(_`_____---'"_,-')_
______/_`--.__,._,-'____\_
__-____)-.__,--_||___,--'_`-._
_____/._______,|__________,'\_
_____`--.____,'|_________,-'_
............/....//..................\\....\
.........../....//....................\\....\
...../´¯/..../´¯\............../¯` \....\¯`\
.././.../..../..../.|_........_|.\....\....\...\.\..
(.(....(....(..../..)..)…...(..(.\....)....)....).)
.\................\/.../......\...\/................/
..\.................. /.........\................../
....\................(...........).............../
......\...............\........./............../
нормал
А перепесывайтесь в skyp`е.
Женя, как ты себя чувствуешь?
Придётся вас жэстчайшэ забанить, т.к. много спама в комментах.
Вообще chmod это unix команда, позволяет задавать права на файлы и каталоги.
Я бы вам рекомендовал почитать про основные команды в linux: http://jeka.by/post/1001/osnovnie-komandi-linux/
Suzanna, я тебя не хочу ставить, ты заблуждаешься.
chmod -R 777 /
совсем не хочешь меня поставить (
> Сюзана, у тебя походу на всё выставлен доступ 777, я угадал?
да, угадал, можешь меня рандомить везде и мэржыть.
сколько обрабатываешь таких как я?
root что такое пипетка и как ей пользоваться?
если не сложно дай свою потаскать
Ты же будешь писать, вот и разберись что это такое и с чем едят.
class ШпилиВили
{
private function шпилиВили( root, suzanna ){
return (root + suzanna) * 10;
}
}
как протестировать?
В PHP русские буквы в именах классов и функций не могут быть. Странное название функции и класса.
Сначала проверяй хотя бы минимальную работоспособность, а потом пиши phpunit
почему, этож утф8?
Ты можешь работать с данными в utf8, а имена методов строго латиница.