<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Разработка &#187; PHPUnit</title>
	<atom:link href="http://www.job-blog.bullgare.ru/tag/phpunit/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.job-blog.bullgare.ru</link>
	<description>о программировании и работе</description>
	<lastBuildDate>Fri, 03 Feb 2012 09:42:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>Полезные вещи в phpUnit</title>
		<link>http://www.job-blog.bullgare.ru/2010/05/%d0%bf%d0%be%d0%bb%d0%b5%d0%b7%d0%bd%d1%8b%d0%b5-%d0%b2%d0%b5%d1%89%d0%b8-%d0%b2-phpunit/</link>
		<comments>http://www.job-blog.bullgare.ru/2010/05/%d0%bf%d0%be%d0%bb%d0%b5%d0%b7%d0%bd%d1%8b%d0%b5-%d0%b2%d0%b5%d1%89%d0%b8-%d0%b2-phpunit/#comments</comments>
		<pubDate>Wed, 19 May 2010 14:17:18 +0000</pubDate>
		<dc:creator>bullgare</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[dataProvider]]></category>
		<category><![CDATA[PHPUnit]]></category>
		<category><![CDATA[setExpectedException]]></category>

		<guid isPermaLink="false">http://www.job-blog.bullgare.ru/?p=718</guid>
		<description><![CDATA[Ниже приведён код теста //{{{ testContragentChecks /** * Проверка учета контрагентов при создании связи * @param classC $contractor1 * @param classC $contractor2 * @param boolean $exceptionExpected * @dataProvider providerContragentChecks */ public function testContragentChecks( $Contractor1 = NULL, $Contractor2 = NULL, $ExceptionExpected = false ) { if ( $Contractor1 &#038;&#038; $Contractor2 ) { $this->op_o[0]->setContractor( $Contractor1 ); $this->op_z[0]->setContractor( [...]]]></description>
			<content:encoded><![CDATA[<p>Ниже приведён код теста<br />
<span id="more-718"></span></p>
<pre class="code">
//{{{ testContragentChecks
/**
 * Проверка учета контрагентов при создании связи
 * @param classC $contractor1
 * @param classC $contractor2
 * @param boolean $exceptionExpected
 * @dataProvider providerContragentChecks
 */
	public function testContragentChecks( $Contractor1 = NULL, $Contractor2 = NULL, $ExceptionExpected = false )
	{
		if ( $Contractor1 &#038;&#038; $Contractor2 )
		{
			$this->op_o[0]->setContractor( $Contractor1 );
			$this->op_z[0]->setContractor( $Contractor2 );
			$this->op_o[0]->save();
			$this->op_z[0]->save();
		}
		if ( $ExceptionExpected ) {
			$this->setExpectedException( 'ExceptionClass' );
		}
		BumsFinM_FinLink::createLink( $this->op_o[0], $this->op_z[0], $this->money[3] );
	}
//===========================================================================}}}
//{{{ providerContragentChecks
/**
 * Дата-провайдер для учета контрагентов при создании связи
 * Возвращает двух контрагентов и флаг - нужно ли ждать исключения
 * @since
 * @author
 */
	public function providerContragentChecks()
	{
		$c1 = classC::create();
		$c1->setName( 'testC1' );
		$c1->save();
		$c2 = classC::create();
		$c1->setName( 'testC2' );
		$c2->save();
		return array(
		// Без контрагентов
			array(),
		// Разные
			array( $c1, $c2, true ),
		// С общим контрагентом
			array( $c1, $c1 ),
		);
	}
</pre>
<p>Стоит обратить внимание на <strong>@dataProvider providerContragentChecks</strong> (название метода произвольное) и на <strong>$this->setExpectedException( &#8216;ExceptionClass&#8217; );</strong>.<br />
Датапровайдер предоставляет данные для теста (они подставляются в аргументы метода), для теста он вызывается один раз, в отличие от setUp().<br />
А setExpectedException говорит о том, что ожидается исключение, и его класс.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.job-blog.bullgare.ru/2010/05/%d0%bf%d0%be%d0%bb%d0%b5%d0%b7%d0%bd%d1%8b%d0%b5-%d0%b2%d0%b5%d1%89%d0%b8-%d0%b2-phpunit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XSS-фильтр на PHP с DOMDocument и XPath</title>
		<link>http://www.job-blog.bullgare.ru/2009/10/xss-%d1%84%d0%b8%d0%bb%d1%8c%d1%82%d1%80-%d0%bd%d0%b0-php-%d1%81-domdocument-%d0%b8-xpath/</link>
		<comments>http://www.job-blog.bullgare.ru/2009/10/xss-%d1%84%d0%b8%d0%bb%d1%8c%d1%82%d1%80-%d0%bd%d0%b0-php-%d1%81-domdocument-%d0%b8-xpath/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 07:17:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[DOMDocument]]></category>
		<category><![CDATA[phpu]]></category>
		<category><![CDATA[PHPUnit]]></category>
		<category><![CDATA[Xpath]]></category>
		<category><![CDATA[xss]]></category>
		<category><![CDATA[фильтрация]]></category>

		<guid isPermaLink="false">http://www.job-blog.bullgare.ru/?p=374</guid>
		<description><![CDATA[Навеяно http://habrahabr.ru/blogs/webdev/70903/ &#8211; много чего идеологически взято оттуда. Но код там написан неудобно для меня, поэтому написал свой класс (3 класса) для фильтрации пользовательского контента. Делает следующее: вырезает все неразрешённые теги, в разрешённых при этом удаляет все неразрешённые атрибуты. После этого для всех ссылок на сторонние сайты проставляет атрибут target=&#187;_blank&#187;. После этого проверяет все атрибуты [...]]]></description>
			<content:encoded><![CDATA[<p>Навеяно <a href="http://habrahabr.ru/blogs/webdev/70903/">http://habrahabr.ru/blogs/webdev/70903/</a> &#8211; много чего идеологически взято оттуда.<br />
Но код там написан неудобно для меня, поэтому написал свой класс (3 класса) для фильтрации пользовательского контента.</p>
<p>Делает следующее: вырезает все неразрешённые теги, в разрешённых при этом удаляет все неразрешённые атрибуты.<br />
После этого для всех ссылок на сторонние сайты проставляет атрибут <em>target=&raquo;_blank&raquo;</em>. После этого проверяет все атрибуты всех тегов, где может встречаться ссылка (<em>img src</em>, к примеру) и если протокола нет среди разрешённых (используется <em>parse_url</em>), добавляется <em>http://</em>.<br />
Работает небыстро.<br />
Использовать при публиковании.<br />
<a href='http://www.job-blog.bullgare.ru/wp-content/uploads/2009/10/TagsStripper.txt'>TagsStripper</a> &#8211; здесь все классы<br />
<a href='http://www.job-blog.bullgare.ru/wp-content/uploads/2009/10/index.txt'>index</a> &#8211; пример использования<br />
<a href='http://www.job-blog.bullgare.ru/wp-content/uploads/2009/10/TestTagsStripper.txt'>TestTagsStripper</a> &#8211; тесты</p>
]]></content:encoded>
			<wfw:commentRss>http://www.job-blog.bullgare.ru/2009/10/xss-%d1%84%d0%b8%d0%bb%d1%8c%d1%82%d1%80-%d0%bd%d0%b0-php-%d1%81-domdocument-%d0%b8-xpath/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Установка PHPUnit &#171;вручную&#187; в Windows</title>
		<link>http://www.job-blog.bullgare.ru/2009/09/%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-phpunit-%d0%b2%d1%80%d1%83%d1%87%d0%bd%d1%83%d1%8e-%d0%b2-windows/</link>
		<comments>http://www.job-blog.bullgare.ru/2009/09/%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-phpunit-%d0%b2%d1%80%d1%83%d1%87%d0%bd%d1%83%d1%8e-%d0%b2-windows/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 08:06:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[администрирование]]></category>
		<category><![CDATA[PHPUnit]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.job-blog.bullgare.ru/?p=364</guid>
		<description><![CDATA[Иногда бывает так, что у PHP по каким-то причинам нет доступа к интернету (NTLM-авторизация, блин((). Тогда придётся ставить всё вручную. В принципе, процесс установки описан на официальном сайте, но неправильно. Действовать можно так: 1.Скачать последнюю стабильную версию PHPUnit (при написании заметки была скачана версия PHPUnit-3.4.0). 2. Разархивировать и скопировать содержимое папки PHPUnit-3.4.0 в папку путь-к-php\PEAR. [...]]]></description>
			<content:encoded><![CDATA[<p>Иногда бывает так, что у PHP по каким-то причинам нет доступа к интернету (NTLM-авторизация, блин(().<br />
Тогда придётся ставить всё вручную.<br />
В принципе, процесс установки описан на <a href="http://www.phpunit.de/manual/current/en/installation.html">официальном сайте</a>, но неправильно.<br />
Действовать можно так:<br />
1.<a href="http://pear.phpunit.de/get/">Скачать</a> последнюю стабильную версию PHPUnit (при написании заметки была скачана версия <a href="http://pear.phpunit.de/get/PHPUnit-3.4.0.tar">PHPUnit-3.4.0</a>).<br />
2. Разархивировать и скопировать содержимое папки <em>PHPUnit-3.4.0</em> в папку <em>путь-к-php\PEAR</em>.<br />
3. Изменить файл <em>путь-к-php\PEAR\phpunit.bat</em>:</p>
<blockquote><p>Было</p></blockquote>
<pre class="code">
set PHPBIN="@php_bin@"
%PHPBIN% "@bin_dir@\phpunit" %*
</pre>
<blockquote><p>Стало</p></blockquote>
<pre class="code">
set PHPBIN="путь-к-php\php"
%PHPBIN% ""путь-к-php\PEAR\phpunit.php" %*
</pre>
<p>Собственно, всё.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.job-blog.bullgare.ru/2009/09/%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-phpunit-%d0%b2%d1%80%d1%83%d1%87%d0%bd%d1%83%d1%8e-%d0%b2-windows/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Установка и использование PHPUnit в Windows</title>
		<link>http://www.job-blog.bullgare.ru/2009/09/%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-%d0%b8-%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-phpunit-%d0%b2-windows/</link>
		<comments>http://www.job-blog.bullgare.ru/2009/09/%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-%d0%b8-%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-phpunit-%d0%b2-windows/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 11:28:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[администрирование]]></category>
		<category><![CDATA[PEAR]]></category>
		<category><![CDATA[PHPUnit]]></category>

		<guid isPermaLink="false">http://www.job-blog.bullgare.ru/?p=251</guid>
		<description><![CDATA[Сначала устанавливаем PEAR. Далее нужно зарегистрировать каналы путь-к-php\pear channel-discover pear.phpunit.de pear channel-discover components.ez.no pear channel-discover pear.symfony-project.com Теперь можно установить PHPUnit путь-к-php\pear install phpunit/PHPUnit При этом может поругаться на версию PEAR. Надо обновить &#8211; см. заметку по установке PEAR. Если не получилось установить с помощью PEAR. После этого нужно писать тесты. Подойдёт что-то вроде ModelAdv.php &#60;? [...]]]></description>
			<content:encoded><![CDATA[<p>Сначала <a href="http://www.job-blog.bullgare.ru/2009/09/установка-pear-под-windows/">устанавливаем PEAR</a>.<br />
Далее нужно зарегистрировать каналы</p>
<pre class="code">
путь-к-php\pear channel-discover pear.phpunit.de
pear channel-discover components.ez.no
pear channel-discover pear.symfony-project.com
</pre>
<p>Теперь можно установить PHPUnit</p>
<pre class="code">путь-к-php\pear install phpunit/PHPUnit</pre>
<p>При этом может поругаться на версию PEAR. Надо обновить &#8211; см. заметку по установке PEAR.<br />
<a href="http://www.job-blog.bullgare.ru/2009/09/%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-phpunit-%D0%B2%D1%80%D1%83%D1%87%D0%BD%D1%83%D1%8E-%D0%B2-windows/">Если не получилось установить с помощью PEAR</a>.<br />
После этого нужно писать тесты.<br />
Подойдёт что-то вроде</p>
<blockquote><p>ModelAdv.php</p></blockquote>
<pre class="code">&lt;?
//инициализация - можно вынести в отдельный файл
$_SERVER['HTTP_HOST'] = 'my_project';
$_SERVER['REQUEST_METHOD'] = 'GET';
$_SERVER['QUERY_STRING'] = '';
//возникают ошибки, т.к. не все серверные переменные установлены
ini_set('display_errors','off');
error_reporting(E_ERROR);
require_once ('S:/wamp/www/moikompas/htdocs/init.php');
ini_set('display_errors','on');
error_reporting(E_ALL);

ini_set('include_path', ini_get('include_path') . ';путь-к-проекту;путь-к-PEAR;.');

require_once 'PHPUnit/Framework.php';

echo "--started--\n";

//--инициализация
/*
//это для тестирования контроллера - для задания всех его свойств
cfg::init('/groups/test/');

//здесь идёт передача управления контроллеру.
//вывод нам не нужен
ob_start();
require_once ('htdocs/index.php');
ob_clean();*/

//загружаем тестируемый класс (если нет автозагрузки)
load::c('adv');

//собственно сами тесты
class AdvTest extends PHPUnit_Framework_TestCase
{
	public function test_renderOpenxBannerOnPage()
	{
		$params =
			array
			(
				array
				(//всё правильно
					'in' 	=&gt; array ('category' =&gt; 'biznes', 'place' =&gt; 'modules_top'),
					'out' 	=&gt; array ('zoneid' =&gt; 74, 'n' =&gt; 'a1ebea39')
				),
				array
				(//всё правильно - вернуть умолчание
					'in' 	=&gt; array ('category' =&gt; 'biznes', 'place' =&gt; 'modules_middle'),
					'out' 	=&gt; array ('zoneid' =&gt; 2, 'n' =&gt; 'a159618f')
				),
				array
				(//неверная категория - вернуть умолчание
					'in' 	=&gt; array ('category' =&gt; 'biznes1', 'place' =&gt; 'modules_top'),
					'out' 	=&gt; array ('zoneid' =&gt; 73, 'n' =&gt; 'ae343b6d')
				),
				array
				(//неверное место показа - вернуть ''
					'in' 	=&gt; array ('category' =&gt; 'biznes', 'place' =&gt; 'modules_to'),
					'out' 	=&gt; ''
				),
				array
				(//неверная категория и место показа - вернуть ''
					'in' 	=&gt; array ('category' =&gt; 'biznes12', 'place' =&gt; 'modules_to'),
					'out' 	=&gt; ''
				),
			);
		foreach ($params as $par)
		{
			$out = adv::renderOpenxBannerOnPage($par['in']['category'], $par['in']['place'], true);
			$this-&gt;assertEquals($out, $par['out']);
		}
	}
	public function test_renderOpenxBannerByParams()
	{
		$params =
			array
			(
				array
				(//всё правильно
					'in' 	=&gt; array ('bannerpage' =&gt; 'compas', 'place' =&gt; 'top', 'category' =&gt; 'biznes'),
					'out' 	=&gt; array ('zoneid' =&gt; 45, 'n' =&gt; 'ae7d79d4')
				),
				array
				(//всё правильно
					'in' 	=&gt; array ('bannerpage' =&gt; 'compas', 'place' =&gt; 'right', 'category' =&gt; 'razvlecheniya'),
					'out' 	=&gt; array ('zoneid' =&gt; 29, 'n' =&gt; 'a14675ed')
				),
				array
				(//всё правильно
					'in' 	=&gt; array ('bannerpage' =&gt; 'index', 'place' =&gt; 'right', 'category' =&gt; null),
					'out' 	=&gt; array ('zoneid' =&gt; 7, 'n' =&gt; 'a2a070c5')
				),
				array
				(//всё правильно - вернуть умолчание
					'in' 	=&gt; array ('bannerpage' =&gt; 'index', 'place' =&gt; 'top', 'category' =&gt; 'biznes'),
					'out' 	=&gt; array ('zoneid' =&gt; 5, 'n' =&gt; 'abff2e70')
				),
				array
				(//страница компаса, неверная категория - вернуть умолчание
					'in' 	=&gt; array ('bannerpage' =&gt; 'compas', 'place' =&gt; 'top', 'category' =&gt; ''),
					'out' 	=&gt; array ('zoneid' =&gt; 44, 'n' =&gt; 'abf29464')
				),
				array
				(//неверное место показа - вернуть ''
					'in' 	=&gt; array ('bannerpage' =&gt; 'index', 'place' =&gt; '', 'category' =&gt; 'biznes'),
					'out' 	=&gt; ''
				),
			);
		foreach ($params as $par)
		{
			$out = adv::renderOpenxBannerByParams($par['in']['bannerpage'], $par['in']['place'], $par['in']['category'], true);
			//var_dump($out);
			$this-&gt;assertEquals($par['out'], $out);
		}
	}
}
?&gt;</pre>
<p>Запускать из папки с исполняемыми файлами php (где php.exe):</p>
<pre class="code">phpunit.bat путь-к-папке-tests\ModelAdv.php</pre>
<p>А дальше &#8211; поехало: <a href="http://ru.wikipedia.org/wiki/Test-Driven_Development">tdd</a>, <a href="http://ru.wikipedia.org/wiki/Extreme_programming">xp</a>.</p>
<p>Ссылки по теме:<br />
<a href="http://www.phpunit.de/manual/current/en/installation.html">документация по установке</a>,<br />
<a href="http://www.phpunit.de/manual/current/en/writing-tests-for-phpunit.html">документация по написанию тестов</a>,<br />
<a href="http://www.phpunit.de/manual/current/en/continuous-integration.html#continuous-integration.phpUnderControl">phpUnderControl</a> (<a href="http://www.martinfowler.com/articles/continuousIntegration.html">зачем?</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.job-blog.bullgare.ru/2009/09/%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-%d0%b8-%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-phpunit-%d0%b2-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHPUnit в MVC-подобных системах</title>
		<link>http://www.job-blog.bullgare.ru/2009/07/phpunit-%d0%b2-mvc-%d0%bf%d0%be%d0%b4%d0%be%d0%b1%d0%bd%d1%8b%d1%85-%d1%81%d0%b8%d1%81%d1%82%d0%b5%d0%bc%d0%b0%d1%85/</link>
		<comments>http://www.job-blog.bullgare.ru/2009/07/phpunit-%d0%b2-mvc-%d0%bf%d0%be%d0%b4%d0%be%d0%b1%d0%bd%d1%8b%d1%85-%d1%81%d0%b8%d1%81%d1%82%d0%b5%d0%bc%d0%b0%d1%85/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 09:13:27 +0000</pubDate>
		<dc:creator>bullgare</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[PHPUnit]]></category>
		<category><![CDATA[программирование]]></category>
		<category><![CDATA[тестирование]]></category>

		<guid isPermaLink="false">http://www.job-blog.bullgare.ru/?p=61</guid>
		<description><![CDATA[Установка PHPUnit производится через PEAR (Описание на англ.). Главное дальше &#8211; это научить систему работать не только (а лучше &#8211; совсем не) с серверными переменными вроде $_SERVER['REQUEST_URI'], а с переданными урлами (чтобы эмулировать обращение к конкретной странице) (Dependency Injection). В рассматриваемом конкретном случае предполагается в начале каждого теста подгружать файл TestInit.php. Листинг1. TestInit.php &#60;? $_SERVER['HTTP_HOST'] [...]]]></description>
			<content:encoded><![CDATA[<p>Установка PHPUnit производится через PEAR (<a href="http://www.phpunit.de/manual/3.4/en/installation.html">Описание на англ.</a>).<br />
Главное дальше &#8211; это научить систему работать не только (а лучше &#8211; совсем не) с серверными переменными вроде $_SERVER['REQUEST_URI'], а с переданными урлами (чтобы эмулировать обращение к конкретной странице) (Dependency Injection).</p>
<p>В рассматриваемом конкретном случае предполагается в начале каждого теста подгружать файл TestInit.php.<br />
Листинг1. TestInit.php</p>
<pre class="code">&lt;?
$_SERVER['HTTP_HOST'] = 'хост';
$_SERVER['REQUEST_METHOD'] = 'GET';
$_SERVER['QUERY_STRING'] = '';
//возникают ошибки, т.к. не все серверные переменные установлены
ini_set('display_errors','off');
error_reporting(E_ERROR);
require_once ('абсолютный-путь-к-рут-сайта/htdocs/init.php');
ini_set('display_errors','on');
error_reporting(E_ALL);

ini_set('include_path', ini_get('include_path')
    . ';абсолютный-путь-к-рут-сайта;абсолютный-путь-к-PEAR;.');

require_once 'PHPUnit/Framework.php';

echo "--started--\n";
?&gt;</pre>
<p>Проблема &#8211; отключить вывод из шаблонов (система была сделана слишком прямолинейной &#8211; нет единого центра управления выводом).<br />
Запуск получается следующий:</p>
<pre class="code">C:\wamp\php5\PEAR&gt;pear-phpunit.bat C:\wamp\www\moikompas\tests\ModelGroup.php</pre>
<p><strong>ССылки</strong><br />
Написание тестов &#8211; <a href="http://www.phpunit.de/manual/3.4/en/writing-tests-for-phpunit.html">страницы PHPUnit Manual</a></p>
<p><a href="http://zendframework.ru/articles/automated-testing-with-zend-framework-and-phpunit">Автоматизированное тестирование ZendFramework-приложений (manual)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.job-blog.bullgare.ru/2009/07/phpunit-%d0%b2-mvc-%d0%bf%d0%be%d0%b4%d0%be%d0%b1%d0%bd%d1%8b%d1%85-%d1%81%d0%b8%d1%81%d1%82%d0%b5%d0%bc%d0%b0%d1%85/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

