
Рассмотрим процесс тестирования приватного метода на простом примере. Нам нужно протестировать метод 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',
),
);
}
И последнее. Пишите код и тесты без ошибок, тогда ваши тесты будут проходить так:
о чем тут думть, протестируй меня, ребята говорят я классная
Личные вопросы можете задавать на 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, а имена методов строго латиница.