<?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>Jony dos Santos Kostetzer &#187; rspec</title>
	<atom:link href="http://jonysk.net/blog/category/rspec/feed/" rel="self" type="application/rss+xml" />
	<link>http://jonysk.net/blog</link>
	<description>ruby on rails and some other stuffs...</description>
	<lastBuildDate>Sun, 30 Aug 2009 17:03:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Slides da palestra no RS Rails 2009</title>
		<link>http://jonysk.net/blog/2009/08/30/slides-da-palestra-no-rs-rails-2009/</link>
		<comments>http://jonysk.net/blog/2009/08/30/slides-da-palestra-no-rs-rails-2009/#comments</comments>
		<pubDate>Sun, 30 Aug 2009 16:31:33 +0000</pubDate>
		<dc:creator>Jony dos Santos Kostetzer</dc:creator>
				<category><![CDATA[cucumber]]></category>
		<category><![CDATA[eventos]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[rspec]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://jonysk.net/blog/?p=63</guid>
		<description><![CDATA[Neste dia 29 de agosto tivemos o primeiro evento especificamente de Rails aqui no Rio Grande do Sul, que foi muito bom por sinal! Parabenizo o pessoal da Softa por tomar frente na organização e promover o evento.
Disponibilizo abaixo os slides da minha palestra de Behaviour-Driven Development e os projetos no github, como havia prometido.
Espero [...]]]></description>
			<content:encoded><![CDATA[<p>Neste dia 29 de agosto tivemos o primeiro evento especificamente de Rails aqui no Rio Grande do Sul, que foi muito bom por sinal! Parabenizo o pessoal da Softa por tomar frente na organização e promover o evento.</p>
<p>Disponibilizo abaixo os slides da minha palestra de Behaviour-Driven Development e os projetos no github, como havia prometido.</p>
<p>Espero que tenham gostado!</p>
<ul>
<li><a href="http://www.slideshare.net/jonysk/behaviourdriven-development-com-ruby">Slides</a></li>
<li><a href="http://github.com/jonysk/rsrails_rspec/tree/master">Live coding RSpec</a></li>
<li><a href=" http://github.com/jonysk/rsrails_cucumber/tree/master">Live coding Cucumber</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://jonysk.net/blog/2009/08/30/slides-da-palestra-no-rs-rails-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shoulda x RSpec: Cuidado nas comparações</title>
		<link>http://jonysk.net/blog/2008/08/17/shoulda-x-rspec-cuidado-nas-comparacoes/</link>
		<comments>http://jonysk.net/blog/2008/08/17/shoulda-x-rspec-cuidado-nas-comparacoes/#comments</comments>
		<pubDate>Sun, 17 Aug 2008 23:25:36 +0000</pubDate>
		<dc:creator>Jony dos Santos Kostetzer</dc:creator>
				<category><![CDATA[rails]]></category>
		<category><![CDATA[rspec]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[bdd]]></category>
		<category><![CDATA[shoulda]]></category>
		<category><![CDATA[testes]]></category>

		<guid isPermaLink="false">http://jonysk.net/blog/2008/08/17/shoulda-x-rspec-cuidado-nas-comparacoes/</guid>
		<description><![CDATA[Tenho visto diversas pessoas falando do Shoulda, e algumas que já sentiram o gosto do RSpec e depois também gostaram do Shoulda. Até aí sem problemas. Agora, ao passo que surgem comparações entre RSpec e Shoulda, um sinal amarelo deveria aparecer por aí e deixar algumas coisas bem claras. E este é o objetivo do [...]]]></description>
			<content:encoded><![CDATA[<p>Tenho visto diversas pessoas falando do Shoulda, e algumas que já sentiram o gosto do RSpec e depois também gostaram do Shoulda. Até aí sem problemas. Agora, ao passo que surgem comparações entre RSpec e Shoulda, um sinal amarelo deveria aparecer por aí e deixar algumas coisas bem claras. E este é o objetivo do post.</p>
<h2>Primeiro ponto</h2>
<p>Em primeiro lugar, a diferença fundamental é: RSpec é totalmente focado no teste de comportamento (Behaviour). Esse é o seu  objetivo e a orientação de sua sintaxe. Ok, é possível sim fazer testes no estilo unit/test com RSpec, mas obviamente, não é a intenção ao usá-lo. É como uma implicação na lógica clássica: vou usar RSpec, logo (deveria) me focar em testar comportamento. E, numa implicação, o inverso não é necessariamente verdadeiro.</p>
<p>Resumindo: RSpec é focado em testar comportamento <em>(Behaviour Driven Development)</em>. Shoulda não é focado em testar comportamento (<em>Test Driven Development</em> sem o &#8220;behaviour&#8221; na história), mas tem a intenção de melhorar o test/unit com helpers, macros e contextos. É um açucar sintático que torna os test/unit mais, digamos, pragmáticos e também documentados.</p>
<p>Dito isso, deve-se ter muito cuidado ao compará-los porque são <strong>ABORDAGENS e VISÕES diferentes</strong>, embora o objetivo de testar seja o mesmo.</p>
<p>Podemos comparar apenas da seguinte forma: Eu gosto mais de RSpec, ou eu gosto mais de Shoulda. Ponto. Qualquer comparação dizendo &#8220;este é melhor&#8221;, ou &#8220;este é pior&#8221; deve ser evitada e levar essa diferença fundamental em consideração: &#8220;Eu gosto de testar comportamento com o RSpec&#8221; ou &#8220;Eu prefiro testar no modelo test/unit com Shoulda&#8221; são argumentos válidos e não depreciativos entre ambos.</p>
<h2>Segundo ponto</h2>
<p>Agora, quando eu vejo alguém falando que faz &#8220;BDD com Shoulda&#8221;, isso me preocupa um pouco. Eu me pergunto: &#8220;Será mesmo?&#8221;. Confesso, sou um pouco purista no que tange a testar comportamento e estou sempre procurando uma melhor forma de fazê-lo. <a href="http://www.nabble.com/BDD-Rails-Shoulda-td16881036.html#a16881036">E já vi opiniões semelhantes por aí</a>.<br />
É possível fazer BDD com Shoulda? Sim, mas de fato <strong>não é a tendência</strong> ao usar o Shoulda. Vejamos porque.</p>
<p>Suponhamos a seguinte linha, retirada da documentacao do Shoulda:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> Article <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span> <span style="color:#006600; font-weight:bold;">&#123;</span>
  named_scope <span style="color:#ff3333; font-weight:bold;">:visible</span>, <span style="color:#ff3333; font-weight:bold;">:conditions</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span>:visible <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span><span style="color:#006600; font-weight:bold;">&#125;</span>
<span style="color:#006600; font-weight:bold;">&#125;</span></pre></div></div>

<p>E o teste para ela com Shoulda:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">should_have_named_scope <span style="color:#ff3333; font-weight:bold;">:visible</span>, <span style="color:#ff3333; font-weight:bold;">:conditions</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span>:visible <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span><span style="color:#006600; font-weight:bold;">&#125;</span></pre></div></div>

<p>Então eu pergunto: testei comportamento ou garanti que existe aquela linha de código no meu Model? Naturalmente, a segunda opção. Não que isso esteja errado, pelo contrário, seu teste tem 100% de cobertura. </p>
<p>Mas, e se minha lógica estiver errada? Digamos que você esqueceu que ao chamar Article.visible não deveria incluir os itens que não foram publicados ainda. Ou seja, você esqueceu uma condição que deveria fazer parte da regra. Mas você tem o teste, então (teoricamente) sua mente está livre do medo de ter errado.</p>
<p>É nesse ponto que entra a idéia de testar comportamento. É <strong>mais provável</strong> que você descubra esse problema se pensou anteriormente no comportamento que sua busca deveria ter. Note, eu disse que é mais provável, não é garantido que você perceberia isso imediatamente.</p>
<h3>OK, e como eu testo o comportamento neste caso?</h3>
<p>Estamos lidando com uma busca. Logo, vamos testar o comportamento desta busca simulando-a com exemplos (sintaxe abaixo é RSpec):</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">describe Article, <span style="color:#996600;">&quot;being displayed on the website&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
  it <span style="color:#996600;">&quot;should display only visible entries&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    visible = Article.<span style="color:#9900CC;">create</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:name</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Art1&quot;</span>, <span style="color:#ff3333; font-weight:bold;">:visible</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span>, <span style="color:#ff3333; font-weight:bold;">:published_at</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#CC00FF; font-weight:bold;">Time</span>.<span style="color:#9900CC;">now</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    hidden = Article.<span style="color:#9900CC;">create</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:name</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Art2&quot;</span>, <span style="color:#ff3333; font-weight:bold;">:visible</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">false</span>, <span style="color:#ff3333; font-weight:bold;">:published_at</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#CC00FF; font-weight:bold;">Time</span>.<span style="color:#9900CC;">now</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    visible_not_published = Article.<span style="color:#9900CC;">create</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:name</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Art3&quot;</span>, <span style="color:#ff3333; font-weight:bold;">:visible</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span>, <span style="color:#ff3333; font-weight:bold;">:published_at</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">nil</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
    Article.<span style="color:#9900CC;">visible</span>.<span style="color:#9900CC;">should</span> be_eql<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#91;</span>visible<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Nota: Num contexto real, estou usando o <a href="http://github.com/thoughtbot/factory_girl/tree/master">plugin factory_girl</a>, da própria empresa que criou o Shoulda. É ótimo, sugiro o uso.</p>
<p>Simulei alguns cenários e acredito que é mais provável que eu encontre um erro no comportamento dessa forma, pois fui obrigado a formular um exemplo. Quem é acostumado a unit/test geralmente olha essa situação como um pouco de overkill: o que faria em uma linha, demorou bem mais tendo que pensar nos exemplos e na construção do teste em si. </p>
<p>Mas, o foco de BDD é <strong>CLAREZA</strong> nos testes e não DRY. Nem sempre um teste deve ser DRY.</p>
<p>É claro que é perfeitamente possível fazer isso com Shoulda e outras libs. A questão é: macros como should_have_named_scope <em>induzem</em> a esquecer o comportamento em benefício da simplicidade e rapidez em escrever o teste.</p>
<h2>After all, it&#8217;s a matter of taste..</h2>
<p>Escolher entre Shoulda e RSpec é uma questão de gosto, como eu falei no começo. Ou você gosta de focar seus testes no comportamento de um objeto, ou você prefere utilizar asserções do test/unit.</p>
<p>Para finalizar, volto a dizer que estamos falando aqui de BDD e TDD, e o objetivo aqui não é comparar frameworks nem gerar flames. &#8220;Shouldeiros&#8221;, não me crucifiquem por favor <img src='http://jonysk.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
E opiniões são bem vindas sobre isso tudo.</p>
<p>Obrigado!</p>
]]></content:encoded>
			<wfw:commentRss>http://jonysk.net/blog/2008/08/17/shoulda-x-rspec-cuidado-nas-comparacoes/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
	</channel>
</rss>
