<?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>webbricks &#187; CakeTestSuite</title>
	<atom:link href="http://blog.grzegorzpawlik.com/tag/caketestsuite/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.grzegorzpawlik.com</link>
	<description>Doświadczenie, to coś, co zdobywamy tuż po chwili w której było nam potrzebne ...</description>
	<lastBuildDate>Tue, 07 Feb 2012 10:09:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>CakeTestSuite i pokrycie kodu (code coverage)</title>
		<link>http://blog.grzegorzpawlik.com/2009/03/caketestsuite-i-pokrycie-kodu-code-coverage/</link>
		<comments>http://blog.grzegorzpawlik.com/2009/03/caketestsuite-i-pokrycie-kodu-code-coverage/#comments</comments>
		<pubDate>Fri, 13 Mar 2009 12:47:00 +0000</pubDate>
		<dc:creator>Greg</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[CakePHP 1.2]]></category>
		<category><![CDATA[CakeTestSuite]]></category>

		<guid isPermaLink="false">http://meta.vipserv.org/blog.grzegorzpawlik.com/?p=59</guid>
		<description><![CDATA[Nareszcie działa ;) Okazuje się, że zmuszenie powyższego do poprawnego działania za pomocą dostępnych oficjalnych opisów nie jest takie proste. Np. metoda podana pod http://bakery.cakephp.org/articles/view/testing-models-with-cakephp-1-2-test-suite dla testu modelu się nie sprawdza. Okazuje się, że tam jest podany stary model tworzenia &#8230; <a href="http://blog.grzegorzpawlik.com/2009/03/caketestsuite-i-pokrycie-kodu-code-coverage/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Nareszcie działa ;) Okazuje się, że zmuszenie powyższego do poprawnego działania za pomocą dostępnych oficjalnych opisów nie jest takie proste.</p>
<p>Np. metoda podana pod <a href="http://bakery.cakephp.org/articles/view/testing-models-with-cakephp-1-2-test-suite">http://bakery.cakephp.org/articles/view/testing-models-with-cakephp-1-2-test-suite</a> dla testu modelu się nie sprawdza. Okazuje się, że tam jest podany stary model tworzenia testów. Poprawna klasa powinna wyglądać mniej więcej tak:</p>
<p><code lang="php"><br />
App::import('model', 'Article');<br />
class ArticleTestCase extends CakeTestCase {<br />
   var $fixtures = array( 'app.article' );</p>
<p>   function start() {<br />
      parent::start();<br />
      $this->Article= &#038; ClassRegistry::init('article');<br />
   }</p>
<p>   function testPublished() {<br />
      $result = $this->Article->published(array('id', 'title'));<br />
      $expected = array(<br />
      array('Article' => array( 'id' => 1, 'title' => 'First Article' )),<br />
      array('Article' => array( 'id' => 2, 'title' => 'Second Article' )),<br />
      array('Article' => array( 'id' => 3, 'title' => 'Third Article' ))<br />
   );<br />
      $this->assertEqual($result, $expected);<br />
   }<br />
}<br />
</code><br />
zamiast podanej:<br />
<code lang="php"><br />
loadModel('Article');<br />
class ArticleTest extends Article {<br />
 var $name = 'ArticleTest';<br />
 var $useDbConfig = 'test_suite';<br />
}<br />
class ArticleTestCase extends CakeTestCase {<br />
 var $fixtures = array( 'article_test' );<br />
 function testPublished() {<br />
  $this->ArticleTest =&#038; new ArticleTest();<br />
  $result = $this->ArticleTest->published(array('id', 'title'));<br />
  $expected = array(<br />
   array('ArticleTest' => array( 'id' => 1, 'title' => 'First Article' )),<br />
   array('ArticleTest' => array( 'id' => 2, 'title' => 'Second Article' )),<br />
   array('ArticleTest' => array( 'id' => 3, 'title' => 'Third Article' ))<br />
  );<br />
  $this->assertEqual($result, $expected);<br />
 }<br />
}<br />
</code></p>
<p>Drugi przypadek generuje następujące problemy:</p>
<ol>
<li>Gdy testy masz ustawione tak, żeby korzystały z tej samej bazy, gdzie masz &#8220;normalne&#8221; tabele, to testy na zmianę będą wykonywać się poprawnie i zgłaszać błąd z nieistniejącą tabelą (`articles_test`)</li>
<li>Gdy masz osobną baze do testów &#8211; będą się sypać relacje. Pewnie zdefiniowanie wszystkich fixtures powiązanych z testowanym modelem rozwiązało by problem, ale nie sprawdzałem.</li>
</ol>
<p>Kolejnym przypadkiem jest zmuszenie CakeTestSuite do wywalenia informacji o procentowym pokryciu kodu testami. Pominę problemy przy instalacji xdebug, założę, że już to masz za sobą.</p>
<p>Prawdopodobnie będziesz dostawał Segmentation Fault po kliknięciu &#8220;Analyze Code Coverage&#8221;. Jeśli tak, odnajdź poniższą linię w pliku cake/test/lib/code_coverage_manager.php:<br />
<code lang="php"><br />
xdebug_start_code_coverage(XDEBUG_CC_UNUSED | XDEBUG_CC_DEAD_CODE);<br />
</code><br />
Niestety Xdebug sypie się przy takim wykonaniu xdebug_start_code_coverage. Możesz zmienić tą linię na<br />
<code lang="php"><br />
xdebug_start_code_coverage(XDEBUG_CC_UNUSED)<br />
</code><br />
lub<br />
<code lang="php"><br />
xdebug_start_code_coverage(XDEBUG_CC_DEAD_CODE)<br />
</code><br />
O rożnicy możesz poczytać w dokumentacji Xdebug.</p>
<p>Ostatnia sprawa to pokrycie kodu, gdy wykonujesz test całej grupy. Jeśli chcesz dostawać informacje o pokryciu dla poszczególnych testów, nie używaj TestManager::loadTestCasesFromFile, ale raczej ładuj każdy plik osobno za pomocą TestManager::addTestFile.</p>
<p>To na razie tyle. Miłego testowania ;)</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://blog.grzegorzpawlik.com/2009/03/caketestsuite-i-pokrycie-kodu-code-coverage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

