<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/2.0.5" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
	<title>Comments on: ¿Una verdad incómoda?</title>
	<link>http://blog.lmcavalle.com/2008/01/21/una-verdad-incomoda/</link>
	<description>Bit by bit...</description>
	<pubDate>Thu, 20 Nov 2008 21:15:00 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.5</generator>

	<item>
		<title>by: Ernesto Jiménez</title>
		<link>http://blog.lmcavalle.com/2008/01/21/una-verdad-incomoda/#comment-2547</link>
		<pubDate>Mon, 28 Jan 2008 22:30:41 +0000</pubDate>
		<guid>http://blog.lmcavalle.com/2008/01/21/una-verdad-incomoda/#comment-2547</guid>
					<description>@luismi: cierto que no sirve para nada, pero como tú has dicho en tu último post: hay que alimentar al hacker xDDDD</description>
		<content:encoded><![CDATA[<p>@luismi: cierto que no sirve para nada, pero como tú has dicho en tu último post: hay que alimentar al hacker xDDDD</p>
]]></content:encoded>
				</item>
	<item>
		<title>by: Luismi Cavallé</title>
		<link>http://blog.lmcavalle.com/2008/01/21/una-verdad-incomoda/#comment-2538</link>
		<pubDate>Wed, 23 Jan 2008 19:42:41 +0000</pubDate>
		<guid>http://blog.lmcavalle.com/2008/01/21/una-verdad-incomoda/#comment-2538</guid>
					<description>@fernando: Esa "alerta" de la que hablas no sería más que un recordatorio cada vez que quitases alguna de las declaraciones de tu modelo. "-- Oye, que has quitado el has_many! -- Ya, ya se que lo he quitado". Pienso que finalmente esa relación existe para satisfacer alguna funcionalidad y esta puede ser testada a alto nivel con un test de integración.

@ernesto: Interesante propuesta. Aunque no le acabo de ver utilidad xD, no sirve ni como la "alarma" de la que habla Fernando ni como la "guía para implementar" de la que habla Juanjo. Sin embargo, sí que sirve para apoyar mi argumento: si podemos llegar a automatizar la generación de la implementación a partir del test o, incluso como tú demuestras, el test a partir de la implementación, entonces es que algo falla, no?

@juanjo: Incluso el escenario que propones en el que una persona escribe el test/especificación y otro la implementación creo que tiene más sentido a nivel de integración que a nivel de unidad.</description>
		<content:encoded><![CDATA[<p>@fernando: Esa &#8220;alerta&#8221; de la que hablas no sería más que un recordatorio cada vez que quitases alguna de las declaraciones de tu modelo. &#8220;&#8212; Oye, que has quitado el has_many! &#8212; Ya, ya se que lo he quitado&#8221;. Pienso que finalmente esa relación existe para satisfacer alguna funcionalidad y esta puede ser testada a alto nivel con un test de integración.</p>
<p>@ernesto: Interesante propuesta. Aunque no le acabo de ver utilidad xD, no sirve ni como la &#8220;alarma&#8221; de la que habla Fernando ni como la &#8220;guía para implementar&#8221; de la que habla Juanjo. Sin embargo, sí que sirve para apoyar mi argumento: si podemos llegar a automatizar la generación de la implementación a partir del test o, incluso como tú demuestras, el test a partir de la implementación, entonces es que algo falla, no?</p>
<p>@juanjo: Incluso el escenario que propones en el que una persona escribe el test/especificación y otro la implementación creo que tiene más sentido a nivel de integración que a nivel de unidad.</p>
]]></content:encoded>
				</item>
	<item>
		<title>by: Juanjo Bazán</title>
		<link>http://blog.lmcavalle.com/2008/01/21/una-verdad-incomoda/#comment-2534</link>
		<pubDate>Tue, 22 Jan 2008 14:00:49 +0000</pubDate>
		<guid>http://blog.lmcavalle.com/2008/01/21/una-verdad-incomoda/#comment-2534</guid>
					<description>Creo que tienes toda la razón Luismi, en general testear la parte declarativa de los modelos no tiene mucho sentido, en realidad no testeamos nuestra aplicación sino que estamos repitiendo uno de los tests de rails.

La útilidad de alerta que menciona Fernando creo que en la práctica desaparece y esos tests en general casi no sirven ni para avisar de que la implementación ha cambiado porque lo primero que va a hacer el programador que borre un validate_presence_of es ir y borrar el test correspondiente. Estamos utilizando un test para explicitar que las lineas de código en las que se establecen relaciones son importantes y no hay que borrarlas, pero eso debería ser obvio.

Sin embargo sí creo que hay algun caso en el que esos tests son útiles, por ejemplo: en un desarrollo BDD puro en el que los tests se escriben antes que el código las especificaciones de los modelos pueden ser directamente los tests, escritos potencialmente por una persona distinta de quien se encargará después de la implementación.
En ese caso sí son útiles los tests sobre validaciones o relaciones, aunque más como guía o requerimientos previos que como chequeo de correcto funcionamiento.</description>
		<content:encoded><![CDATA[<p>Creo que tienes toda la razón Luismi, en general testear la parte declarativa de los modelos no tiene mucho sentido, en realidad no testeamos nuestra aplicación sino que estamos repitiendo uno de los tests de rails.</p>
<p>La útilidad de alerta que menciona Fernando creo que en la práctica desaparece y esos tests en general casi no sirven ni para avisar de que la implementación ha cambiado porque lo primero que va a hacer el programador que borre un validate_presence_of es ir y borrar el test correspondiente. Estamos utilizando un test para explicitar que las lineas de código en las que se establecen relaciones son importantes y no hay que borrarlas, pero eso debería ser obvio.</p>
<p>Sin embargo sí creo que hay algun caso en el que esos tests son útiles, por ejemplo: en un desarrollo <span class="caps">BDD</span> puro en el que los tests se escriben antes que el código las especificaciones de los modelos pueden ser directamente los tests, escritos potencialmente por una persona distinta de quien se encargará después de la implementación.<br />
En ese caso sí son útiles los tests sobre validaciones o relaciones, aunque más como guía o requerimientos previos que como chequeo de correcto funcionamiento.</p>
]]></content:encoded>
				</item>
	<item>
		<title>by: Ernesto Jiménez</title>
		<link>http://blog.lmcavalle.com/2008/01/21/una-verdad-incomoda/#comment-2532</link>
		<pubDate>Tue, 22 Jan 2008 11:47:56 +0000</pubDate>
		<guid>http://blog.lmcavalle.com/2008/01/21/una-verdad-incomoda/#comment-2532</guid>
					<description>Anoche después de comentar tenía el gusanillo, así que cutre-codee esto:
http://pastie.caboo.se/141826

Limitaciones, si tienes alguna clase de tests de modelo que no deriva de Test::Units los tests cascarán.

Si alguien quiere meterle mano al plugin ya tiene un primer comienzo ;)

Un saludo!</description>
		<content:encoded><![CDATA[<p>Anoche después de comentar tenía el gusanillo, así que cutre-codee esto:<br />
<a href="http://pastie.caboo.se/141826" rel="nofollow">http://pastie.caboo.se/141826</a></p>
<p>Limitaciones, si tienes alguna clase de tests de modelo que no deriva de Test::Units los tests cascarán.</p>
<p>Si alguien quiere meterle mano al plugin ya tiene un primer comienzo ;)</p>
<p>Un saludo!</p>
]]></content:encoded>
				</item>
	<item>
		<title>by: Ernesto Jiménez</title>
		<link>http://blog.lmcavalle.com/2008/01/21/una-verdad-incomoda/#comment-2528</link>
		<pubDate>Mon, 21 Jan 2008 22:41:10 +0000</pubDate>
		<guid>http://blog.lmcavalle.com/2008/01/21/una-verdad-incomoda/#comment-2528</guid>
					<description>Yo diferenciaría relaciones y validaciones.

Las relaciones no las testeo prácticamente nunca (si se pierde un belongs_to, saltará en cualquiera de las decenas de tests que lo usan), y puestos a testearlo, testearía que el modelo proporciona la interfaz de la relación, no la relación en sí (de eso ya se encargan los tests de AR)

Sobre las validaciones, eso ya es otro cantar. La cuestión de testear las validaciones viene del concepto de "fat models" donde tenemos controllers que prácticamente no hacen nada.

e.g:
&lt;code lang="ruby"&gt;
def create
  @post = Post.find(params[:post_id])
  @comment = @post.comments.build(params[:comment])
  
  if @comment.save
    notify :notice, 'Comment added'
  else
    notify_errors @comment
  end
end
&lt;/code&gt;

Como ves, toda la carga de la validación cae sobre el modelo, con lo que deberíamos testear esa parte.

Lo que sí que creo es que quizá cabría hacer una mejor refactorización para testear los validadores (y asociaciones). Dicha refactorización consistiría en no escribir esos tests, sino que el framework identificase las validaciones y crease los tests por metaprogramación.

Algún día quizá intente hacer el auto_testeado, al fin y al cabo, lo que estamos haciendo con shoulda es repetir lo que ya hemos escrito en el modelo :)</description>
		<content:encoded><![CDATA[<p>Yo diferenciaría relaciones y validaciones.</p>
<p>Las relaciones no las testeo prácticamente nunca (si se pierde un belongs_to, saltará en cualquiera de las decenas de tests que lo usan), y puestos a testearlo, testearía que el modelo proporciona la interfaz de la relación, no la relación en sí (de eso ya se encargan los tests de AR)</p>
<p>Sobre las validaciones, eso ya es otro cantar. La cuestión de testear las validaciones viene del concepto de &#8220;fat models&#8221; donde tenemos controllers que prácticamente no hacen nada.</p>
<p>e.g:<br />
<pre class="ruby"><span style="color:#9966CC; font-weight:bold;">def</span> create
  @post = Post.<span style="color:#9900CC;">find</span><span style="color:#006600; font-weight:bold;">&#40;</span>params<span style="color:#006600; font-weight:bold;">&#91;</span>:post_id<span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  @comment = @post.<span style="color:#9900CC;">comments</span>.<span style="color:#9900CC;">build</span><span style="color:#006600; font-weight:bold;">&#40;</span>params<span style="color:#006600; font-weight:bold;">&#91;</span>:comment<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;">if</span> @comment.<span style="color:#9900CC;">save</span>
    notify :notice, 'Comment added'
  <span style="color:#9966CC; font-weight:bold;">else</span>
    notify_errors @comment
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></p>
<p>Como ves, toda la carga de la validación cae sobre el modelo, con lo que deberíamos testear esa parte.</p>
<p>Lo que sí que creo es que quizá cabría hacer una mejor refactorización para testear los validadores (y asociaciones). Dicha refactorización consistiría en no escribir esos tests, sino que el framework identificase las validaciones y crease los tests por metaprogramación.</p>
<p>Algún día quizá intente hacer el auto_testeado, al fin y al cabo, lo que estamos haciendo con shoulda es repetir lo que ya hemos escrito en el modelo :)</p>
]]></content:encoded>
				</item>
	<item>
		<title>by: Fernando</title>
		<link>http://blog.lmcavalle.com/2008/01/21/una-verdad-incomoda/#comment-2527</link>
		<pubDate>Mon, 21 Jan 2008 22:23:31 +0000</pubDate>
		<guid>http://blog.lmcavalle.com/2008/01/21/una-verdad-incomoda/#comment-2527</guid>
					<description>Gran post, sí señor.

En mi opinión la diferencia entre escribir tests unitarios sobre la parte declarativa sí que tiene sentido por una razón:

si tu modelo post no estuviera relacionado con un usuario, ¿tu modelo seguiría siendo correcto? ¿o debería de haber algo que hiciera saltar una alarma y dijera: "esto no está bien, tiene que existir un usuario asociado al post"?

No sé si el lugar para definir esa "alerta" es un test de unidad, porque de teoría controlo bastante poco, pero a mí no me parece mal sitio, ¿no?</description>
		<content:encoded><![CDATA[<p>Gran post, sí señor.</p>
<p>En mi opinión la diferencia entre escribir tests unitarios sobre la parte declarativa sí que tiene sentido por una razón:</p>
<p>si tu modelo post no estuviera relacionado con un usuario, ¿tu modelo seguiría siendo correcto? ¿o debería de haber algo que hiciera saltar una alarma y dijera: &#8220;esto no está bien, tiene que existir un usuario asociado al post&#8221;?</p>
<p>No sé si el lugar para definir esa &#8220;alerta&#8221; es un test de unidad, porque de teoría controlo bastante poco, pero a mí no me parece mal sitio, ¿no?</p>
]]></content:encoded>
				</item>
</channel>
</rss>
