CakePHP - Manual/CommonTasks/Testing/TestingHelpers /wiki/Manual/CommonTasks/Testing/TestingHelpers History/revisions of CakePHP/Manual/CommonTasks/Testing/TestingHelpers en-us 2009-04-28 22:30:43 /wiki/Manual/CommonTasks/Testing/TestingHelpers/show?time=2009-04-28+22%3A30%3A43 <div class="pageBefore"><img src="/wiki_/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" /></div><div class="page"> <b>Сравнение версий <a name=".manual.commontasks.testing.testinghelpers" href="/wiki/Manual/CommonTasks/Testing/TestingHelpers" class="">/Manual&nbsp;/&nbsp;Common&nbsp;Tasks&nbsp;/&nbsp;Testing&nbsp;/&nbsp;Testing&nbsp;Helpers</a> за <a href="/wiki/Manual/CommonTasks/Testing/TestingHelpers?time=2009-04-28+22%3A30%3A43">2009-04-28 22:30:43</a> и <a href="/wiki/Manual/CommonTasks/Testing/TestingHelpers">2009-04-30 18:29:44</a></b><br /> <br /> <b>Добавлено:</b><br /> <div class="additions">Поскольку приличное количество кода расположено в&nbsp;классах помощников, то&nbsp;важно проводить тестирование этих классов.<br /> Тестирование помощников немного похоже на&nbsp;тестирование компонентов. Предположим у&nbsp;нас есть хелпер <!--notypo-->CurrencyRendererHelper<!--/notypo-->, расположенный в&nbsp;app/views/helpers/currency_renderer.php, и&nbsp;тест для&nbsp;этого хелпера, расположенный в&nbsp;app/tests/cases/helpers/currency_renderer.test.php.<br /> <hr noshade="noshade" size="1" /><a name="h903-1"></a><h3>Создание теста для&nbsp;помощника, часть I</h3> Прежде всего мы&nbsp;определим обязанности нашего хелпера <!--notypo-->CurrencyRendererHelper<!--/notypo-->. У&nbsp;него будут два&nbsp;метода, просто для&nbsp;демонстрационных целей:<br /> <div class="indent"> <strong>function usd($amount)</strong></div> Эта&nbsp;функция будет получать сумму для&nbsp;отображения. Она&nbsp;будет принимать число, дополнять нулями (в случае необходимости) до&nbsp;двух знаков после запятой, и&nbsp;добавлять префикс 'USD'.<br /> <div class="indent"> <strong>function euro($amount)</strong></div> Эта&nbsp;функция будет делать тоже, что&nbsp;и&nbsp;usd(), но&nbsp;префикс будет 'EUR'. И&nbsp;просто, чтобы сделать эту&nbsp;функцию немного сложнее, мы&nbsp;заключим результат в&nbsp;теги span: <br /> <!--notypo--><div class="code"><code><span style="color: #000000"> <span style="color: #0000BB">&lt;?&nbsp;</span><span style="color: #007700">&lt;</span><span style="color: #0000BB">span&nbsp;</span><span style="color: #007700">class=</span><span style="color: #DD0000">"euro"</span><span style="color: #007700">&gt;&lt;/</span><span style="color: #0000BB">span</span><span style="color: #007700">&gt;&nbsp;</span><span style="color: #0000BB">?&gt;</span> </span> </code></div><!--/notypo--><br /> Давайте создадим тесты:<br /> <!--notypo--><div class="code"><code><span style="color: #000000"> <span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">//Импортирование&nbsp;хелпера&nbsp;для&nbsp;его&nbsp;тестирования<br />//Если&nbsp;тестируемый&nbsp;хелпер&nbsp;использует&nbsp;какой-то&nbsp;другой&nbsp;хелпер,&nbsp;например&nbsp;Html,&nbsp;<br />//то&nbsp;он&nbsp;должен&nbsp;быть&nbsp;также&nbsp;импортирован&nbsp;в&nbsp;этой&nbsp;строке,&nbsp;и&nbsp;инициализирован&nbsp;в&nbsp;startTest().<br /></span><span style="color: #0000BB">App</span><span style="color: #007700">::</span><span style="color: #0000BB">import</span><span style="color: #007700">(</span><span style="color: #DD0000">'Helper'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'CurrencyRenderer'</span><span style="color: #007700">);<br />class&nbsp;</span><span style="color: #0000BB">CurrencyRendererTest&nbsp;</span><span style="color: #007700">extends&nbsp;</span><span style="color: #0000BB">CakeTestCase&nbsp;</span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;</span><span style="color: #0000BB">$currencyRenderer&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">null</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//Здесь&nbsp;мы&nbsp;инициализируем&nbsp;наш&nbsp;хелпер,&nbsp;и&nbsp;все&nbsp;другие&nbsp;необходимые&nbsp;хелперы.<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">startTest</span><span style="color: #007700">()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">currencyRenderer&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">CurrencyRendererHelper</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//testing&nbsp;usd()&nbsp;function.<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">testUsd</span><span style="color: #007700">()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">assertEqual</span><span style="color: #007700">(</span><span style="color: #DD0000">'USD&nbsp;5.30'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">currencyRenderer</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">usd</span><span style="color: #007700">(</span><span style="color: #0000BB">5.30</span><span style="color: #007700">));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//Мы&nbsp;должны&nbsp;всегда&nbsp;получать&nbsp;число&nbsp;с&nbsp;двумя&nbsp;знаками&nbsp;после&nbsp;запятой.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">assertEqual</span><span style="color: #007700">(</span><span style="color: #DD0000">'USD&nbsp;1.00'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">currencyRenderer</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">usd</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">assertEqual</span><span style="color: #007700">(</span><span style="color: #DD0000">'USD&nbsp;2.05'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">currencyRenderer</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">usd</span><span style="color: #007700">(</span><span style="color: #0000BB">2.05</span><span style="color: #007700">));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//Проверка&nbsp;разделителя&nbsp;тысяч<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">assertEqual</span><span style="color: #007700">(</span><span style="color: #DD0000">'USD&nbsp;12,000.70'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">currencyRenderer</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">usd</span><span style="color: #007700">(</span><span style="color: #0000BB">12000.70</span><span style="color: #007700">));<br />&nbsp;&nbsp;&nbsp;&nbsp;}</span> </span> </code></div><!--/notypo--><br /> Здесь мы&nbsp;вызываем метод usd() с&nbsp;различными параметрами и&nbsp;говорим нашей тестовой оболочке проверять соответствие возвращаемого и&nbsp;ожидаемого результата.<br /> Если запустить этот тест сейчас, то&nbsp;он выдаст ошибки (потому что&nbsp;хелпер <!--notypo-->CurrencyRendererHelper<!--/notypo--> еще&nbsp;не&nbsp;существует) showing that we&nbsp;have 3 fails.<br /> Поскольку мы&nbsp;знаем, что&nbsp;должен делать наш&nbsp;метод, то&nbsp;можем написать его:<br /> <!--notypo--><div class="code"><code><span style="color: #000000"> <span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">CurrencyRendererHelper&nbsp;</span><span style="color: #007700">extends&nbsp;</span><span style="color: #0000BB">AppHelper&nbsp;</span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;</span><span style="color: #0000BB">usd</span><span style="color: #007700">(</span><span style="color: #0000BB">$amount</span><span style="color: #007700">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #DD0000">'USD&nbsp;'&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #0000BB">number_format</span><span style="color: #007700">(</span><span style="color: #0000BB">$amount</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">2</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'.'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">','</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></span><span style="color: #0000BB">?&gt;</span> </span> </code></div><!--/notypo--><br /> Здесь мы&nbsp;устанавливаем число десятичных знаков в&nbsp;2, разделитель десятичных знаков &ndash; точка '.', разделитель тысяч &ndash; запятая ',', и&nbsp;префикс &ndash; строка 'USD'.<br /> Сохраним это&nbsp;в&nbsp;app/views/helpers/currency_renderer.php и&nbsp;запустим тестирование. Вы&nbsp;должны увидеть зеленый прямоугольник и&nbsp;сообщения об&nbsp;успешном прохождении 4 тестов. <br /> <span class="missingpage">&lt;&lt; Тестирование контроллеров</span><a href="/wiki/TestingControllers/edit?add=1" title="Создать эту страницу">?</a> | <span class="missingpage">Тестирование компонентов &gt;&gt;</span><a href="/wiki/TestingComponents/edit?add=1" title="Создать эту страницу">?</a></div></div>