<?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>Espacio de Dario Quintana &#187; Testing</title>
	<atom:link href="http://blog.darioquintana.com.ar/category/testing/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.darioquintana.com.ar</link>
	<description></description>
	<lastBuildDate>Tue, 21 Jun 2011 22:51:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>XUnit 1.0.2 y Resharper 4.1</title>
		<link>http://blog.darioquintana.com.ar/2008/09/04/xunit-102-and-resharper-41/</link>
		<comments>http://blog.darioquintana.com.ar/2008/09/04/xunit-102-and-resharper-41/#comments</comments>
		<pubDate>Thu, 04 Sep 2008 18:36:44 +0000</pubDate>
		<dc:creator>Dario Quintana</dc:creator>
				<category><![CDATA[Testing]]></category>
		<category><![CDATA[Tool]]></category>

		<guid isPermaLink="false">http://blog.darioquintana.com.ar/2008/09/04/xunit-102-and-resharper-41/</guid>
		<description><![CDATA[<p>XUnit todavía no soporta correr los tests en Resharper 4.1, entonces decidí crear una release hecha en casa.</p> <p>Podés descargar este paquete XUnit testeado con Resharper 4.1 y TestDriven 2.14.2190. Este no es un release oficial, podés obtener una oficial en su pagina de <a href="http://codeplex.com/xunit">Codeplex</a>.</p> <a href="http://darioquintana.googlecode.com/files/XUnit_r23042_RS4.1.7z">Descargar</a>]]></description>
			<content:encoded><![CDATA[<p>XUnit todavía no soporta correr los tests en Resharper 4.1, entonces decidí crear una release hecha en casa.</p>
<p>Podés descargar este paquete XUnit testeado con Resharper 4.1 y TestDriven 2.14.2190. Este no es un release oficial, podés obtener una oficial en su pagina de <a href="http://codeplex.com/xunit">Codeplex</a>.</p>
<h4><a href="http://darioquintana.googlecode.com/files/XUnit_r23042_RS4.1.7z">Descargar</a></h4>
]]></content:encoded>
			<wfw:commentRss>http://blog.darioquintana.com.ar/2008/09/04/xunit-102-and-resharper-41/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XUnit 1.0 &#8211; Usando ReSharper como Runner</title>
		<link>http://blog.darioquintana.com.ar/2008/04/24/xunit-10-usando-resharper-como-runner/</link>
		<comments>http://blog.darioquintana.com.ar/2008/04/24/xunit-10-usando-resharper-como-runner/#comments</comments>
		<pubDate>Thu, 24 Apr 2008 16:22:19 +0000</pubDate>
		<dc:creator>Dario Quintana</dc:creator>
				<category><![CDATA[Testing]]></category>
		<category><![CDATA[Tool]]></category>

		<guid isPermaLink="false">http://blog.darioquintana.com.ar/2008/04/24/xunit-10-usando-resharper-como-runner/</guid>
		<description><![CDATA[<p>Hoy me enter&#233; de este lanzamiento que de manera particular lo estaba esperando. Hace un tiempo atr&#225;s cuando este proyecto estaba en pa&#241;ales, <a href="http://blog.darioquintana.com.ar/2007/10/08/xunitnet-excepciones-esperadas/">estuvimos</a> hablando un poco sobre &#233;l. </p> <p>Recordemos que existen muchos frameworks para realizar Unit Testing, y XUnit es un proyecto particular, tiene diferencias bien marcadas con respecto a otros frameworks [...]]]></description>
			<content:encoded><![CDATA[<p>Hoy me enter&#233; de este lanzamiento que de manera particular lo estaba esperando. Hace un tiempo atr&#225;s cuando este proyecto estaba en pa&#241;ales, <a href="http://blog.darioquintana.com.ar/2007/10/08/xunitnet-excepciones-esperadas/">estuvimos</a> hablando un poco sobre &#233;l. </p>
<p>Recordemos que existen muchos frameworks para realizar Unit Testing, y XUnit es un proyecto particular, tiene diferencias bien marcadas con respecto a otros frameworks como por ejemplo NUnit. Si bien el creador de XUnit es el mismo que cre&#243; NUnit, la principal idea de la creaci&#243;n de otro framework de testeo fue alejarse de algunos aspectos intr&#237;nsecos que NUnit los ten&#237;a fuertemente heredados de su fuente de inspiraci&#243;n JUnit.</p>
<p> <a href="http://www.codeplex.com/xunit/Release/ProjectReleases.aspx?ReleaseId=12516"><br />
<h4>Descargar XUnit 1.0</h4>
<p> </a>
<p>Para correr los tests podemos utilizar diferentes runners:</p>
<ul>
<li>xunit.console (se distribuye con los binarios de XUnit)</li>
<li>xunit.gui (se distribuye con los binarios de XUnit)</li>
<li><a href="http://www.testdriven.net/">TestDriven</a> (se integra con Visual Studio)</li>
<li><a href="http://www.jetbrains.com/resharper/download/">Resharper</a> 3.1 (se integra con Visual Studio)</li>
</ul>
<p>Aqu&#237; tienen una captura para que vean en acci&#243;n a XUnit corriendo desde ReSharper:</p>
<p><img src="http://uooopaa.googlepages.com/XUnit10_ReSharper.png" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.darioquintana.com.ar/2008/04/24/xunit-10-usando-resharper-como-runner/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Sintaxis en Rhino Mocks</title>
		<link>http://blog.darioquintana.com.ar/2007/10/08/sintaxis-en-rhino-mocks/</link>
		<comments>http://blog.darioquintana.com.ar/2007/10/08/sintaxis-en-rhino-mocks/#comments</comments>
		<pubDate>Mon, 08 Oct 2007 04:25:19 +0000</pubDate>
		<dc:creator>Dario Quintana</dc:creator>
				<category><![CDATA[Mocking]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://blog.darioquintana.com.ar/2007/10/08/sintaxis-en-rhino-mocks/</guid>
		<description><![CDATA[<p><a href="http://ayende.com/projects/rhino-mocks.aspx">Rhino Mocks</a> es un&#160;excelente framework para realizar mocking&#160;en nuestras pruebas unitarias. Una de las buenas razones para usarlo es que no hace uso de strings para hardcodear los nombres de tipos, metodos, properties, etc, reduciendo entonces la posibilidad de error en tiempo de ejecución. </p> <p>Despues de la versión 3.0.5 liberada hace un tiempo, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://ayende.com/projects/rhino-mocks.aspx">Rhino Mocks</a> es un&nbsp;excelente framework para realizar mocking&nbsp;en nuestras pruebas unitarias. Una de las buenas razones para usarlo es que no hace uso de strings para hardcodear los nombres de tipos, metodos, properties, etc, reduciendo entonces la posibilidad de error en tiempo de ejecución. </p>
<p>Despues de la versión 3.0.5 liberada hace un tiempo, la sintaxis para realizar mocking quedó un poco más fácil de leer y con menos posibilidades de error.</p>
<p>Al mirar este <a href="http://ayende.com/97/section.aspx/download/194">screencast</a>introductorio a Rhino Mocks&nbsp;te darás cuenta como se hacía antes. También&nbsp;salta a la vista que cualquiera puede olvidar de llamar al método VerifyCall()&nbsp;dejando libre la posibilidad de&nbsp;errores.&nbsp;&nbsp;</p>
<pre class="csharpcode">        [Test]
        <span class="kwrd">public</span> <span class="kwrd">void</span> SigmoidalFunctionDerivative()
        {
            INet net = Mock&lt;INet&gt;();

            ITransferFunction tf = <span class="kwrd">new</span> SigmoidalTransferFuncion();

            Expect
                    .Call(net.Value)
                    .Return(5.0);

            Mocks.ReplayAll();

                <span class="rem">//f'(net) = y * ( 1 - y )</span>
                Assert.Equal(0.006648057, Math.Round(tf.Derivate(net), 9));

            Mocks.VerifyAll();
        }</pre>
<p>Una forma más clara de hacerlo es:</p>
<pre class="csharpcode">        [Test]
        <span class="kwrd">public</span> <span class="kwrd">void</span> SigmoidalFunctionDerivative()
        {
            INet net = Mock&lt;INet&gt;();

            ITransferFunction tf = <span class="kwrd">new</span> SigmoidalTransferFuncion();

            <span class="kwrd">using</span> (Mocks.Record())
            {
                Expect
                    .Call(net.Value)
                    .Return(5.0);
            }

            <span class="kwrd">using</span> (Mocks.Playback())
            {
                <span class="rem">//f'(net) = y * ( 1 - y )</span>
                Assert.Equal(0.006648057, Math.Round(tf.Derivate(net), 9));
            }
        }</pre>
<p>En estos ejemplos estoy usando un helper para el metodo Mock&lt;T&gt;() y la property MockRepository Mocks {get; set; }. Nada de otro mundo,&nbsp;y se pueda mejorar:&nbsp;</p>
<pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">class</span> TestFixtureBase
    {
        <span class="kwrd">private</span> MockRepository mocks;

        <span class="kwrd">public</span> MockRepository Mocks
        {
            get
            {
                <span class="kwrd">if</span> (mocks == <span class="kwrd">null</span>)
                { mocks = <span class="kwrd">new</span> MockRepository(); }

                <span class="kwrd">return</span> mocks;
            }
        }

        <span class="kwrd">public</span> T Mock&lt;T&gt;()
        {
            <span class="kwrd">return</span> Mocks.CreateMock&lt;T&gt;();
        }
    }</pre>
<p>Existe aún así otra manera de hacer lo mismo, en vez de using, hacemos uso de delegados y la clase With (no es el de VB pero creo que por ahí vino la idea):&nbsp;</p>
<pre class="csharpcode">        [Test]
        <span class="kwrd">public</span> <span class="kwrd">void</span> SigmoidalFunctionDerivative()
        {
            INet net = Mock&lt;INet&gt;();

            ITransferFunction tf = <span class="kwrd">new</span> SigmoidalTransferFuncion();

            With
                .Mocks(Mocks)
                .Expecting(<span class="kwrd">delegate</span>
                               {
                                   Expect
                                       .Call(net.Value)
                                       .Return(5.0);
                               })
                .Verify(<span class="kwrd">delegate</span>
                            {
                                <span class="rem">//f'(net) = y * ( 1 - y )</span>
                                Assert.Equal(0.006648057,
                                    Math.Round(tf.Derivate(net), 9));
                            });
        }</pre>
<p>Particulamente elijo la opción 2, el usar la sintaxis con using.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.darioquintana.com.ar/2007/10/08/sintaxis-en-rhino-mocks/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>xUnit.Net &#8211; Excepciones Esperadas</title>
		<link>http://blog.darioquintana.com.ar/2007/10/08/xunitnet-excepciones-esperadas/</link>
		<comments>http://blog.darioquintana.com.ar/2007/10/08/xunitnet-excepciones-esperadas/#comments</comments>
		<pubDate>Mon, 08 Oct 2007 03:27:34 +0000</pubDate>
		<dc:creator>Dario Quintana</dc:creator>
				<category><![CDATA[Testing]]></category>
		<category><![CDATA[Tool]]></category>

		<guid isPermaLink="false">http://blog.darioquintana.com.ar/2007/10/08/xunitnet-excepciones-esperadas/</guid>
		<description><![CDATA[<p>Para los que no estaban enterados, el autor de NUnit saca a la luz este <a href="http://jamesnewkirk.typepad.com/posts/2007/09/announcing-xuni.html">nuevo Framework de unit&#160;testing</a>. La intención de un nuevo Framework de Testing para .Net parecería&#160;querer reinventar la rueda, pero no lo es. Muchas practicas que se hacían en NUnit (y muchas de estas heredadas de JUnit) no van a [...]]]></description>
			<content:encoded><![CDATA[<p>Para los que no estaban enterados, el autor de NUnit saca a la luz este <a href="http://jamesnewkirk.typepad.com/posts/2007/09/announcing-xuni.html">nuevo Framework de unit&nbsp;testing</a>. La intención de un nuevo Framework de Testing para .Net parecería&nbsp;querer reinventar la rueda, pero no lo es. Muchas practicas que se hacían en NUnit (y muchas de estas heredadas de JUnit) no van a estar disponibles -para bien de nuestro código según argumenta James Newkirk. </p>
<p>Uno de los cambios: No va más el ExpectedException. Y el argumento de su desaparición es válido: Puede que una linea de codigo arroje esa excepción, y no sea la linea de codigo que estamos esperando a que lo haga. Ahora debemos hacerlos así:&nbsp;</p>
<pre class="csharpcode">        [Test]
        <span class="kwrd">public</span> <span class="kwrd">void</span> NeuronNotConnected()
        {
            INeuron n = <span class="kwrd">new</span> SigmoidalNeuron();

            Assert.Throws&lt;BpnException&gt;(
                <span class="kwrd">delegate</span>
                {
                    <span class="kwrd">double</span> foo = n.Net.Value;
                });
        }</pre>
<p>Esta es la pagina del proyecto <a title="http://www.codeplex.com/xunit" href="http://www.codeplex.com/xunit">http://www.codeplex.com/xunit</a>.</p>
<p>Y para correr los test con Visual Studio pueden usar <a title="http://www.testdriven.net/" href="http://www.testdriven.net/">http://www.testdriven.net/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.darioquintana.com.ar/2007/10/08/xunitnet-excepciones-esperadas/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SessionImpl, Unit Testing&#8230; y las flores siguen en la mesa</title>
		<link>http://blog.darioquintana.com.ar/2007/09/27/sessionimpl-unit-testing-y-las-flores-siguen-en-la-mesa/</link>
		<comments>http://blog.darioquintana.com.ar/2007/09/27/sessionimpl-unit-testing-y-las-flores-siguen-en-la-mesa/#comments</comments>
		<pubDate>Thu, 27 Sep 2007 04:38:40 +0000</pubDate>
		<dc:creator>Dario Quintana</dc:creator>
				<category><![CDATA[NHibernate]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://blog.darioquintana.com.ar/2007/09/27/sessionimpl-unit-testing-y-las-flores-siguen-en-la-mesa/</guid>
		<description><![CDATA[<p>El truco de sacar el mantel y que el florero quede en el centro de la mesa intacto lo hizo el Sr. Fabio Maulo con una de las clases más importantes del core de NHibernate: SessionImpl.</p> <p><a href="http://groups.google.com.ar/group/NHibernate-Hispano/browse_thread/thread/db1cf48096d440f7">En este post nos dice</a>:</p> <p>El la versión 1.2.x la session es de 5819 lineas de código. <br [...]]]></description>
			<content:encoded><![CDATA[<p>El truco de sacar el mantel y que el florero quede en el centro de la mesa intacto lo hizo el Sr. Fabio Maulo con una de las clases más importantes del core de NHibernate: SessionImpl.</p>
<p><a href="http://groups.google.com.ar/group/NHibernate-Hispano/browse_thread/thread/db1cf48096d440f7">En este post nos dice</a>:</p>
<blockquote><p>El la versión 1.2.x la session es de 5819 lineas de código. <br />Después de la modificación quedó en 3819.</p>
</blockquote>
<p>Hagan las cuentas y son muchas lineas de código para tirarlas a la basura sin pensarlo! Claro, pero toda la tranquilidad viene del lado de las pruebas de unidad, que es practicamente lo que mantiene viva a la integridad&nbsp;en NHibernate.
<p>Después de esto, uds sacarán sus conclusiones: si vale ponerle atención a las pruebas de unidad en nuestros proyectos, si es muy laborioso como para prestarle atención, o es&nbsp;una inversión y una tranquilidad&nbsp;sabiendo que la aplicación a medida que va creciendo en el ciclo de desarrollo se vá integrando bien.
<p>Otra cosa a resaltar:<br />
<blockquote>
<p>Hay muchos que para probar algo crean un proyecto de consola, prueban una clase y luego tiran el proyecto. Bueno&#8230; ya que hay que probar conviene escribir la prueba una sola vez y <br />verificar que siga funcionando siempre.</p>
</blockquote>
<p>Totalmente de acuerdo, y hasta hace un tiempo yo hacia esto&#8230; me incluyo y lo reconozco. Al principio,&nbsp;al&nbsp;iniciarte en el&nbsp;arte&nbsp;de las pruebas de unidad&nbsp;puede que no se note la diferencia entre un test y una sesión de debug, puede que los tests los hagas mal, o puede que no sean muy legibles, pero todo se mejora con un poco de ejercicio. </p>
<p>Y lo más lindo del resultado de usar pruebas de unidad&nbsp;es que cuando terminás de hacer las modificaciones pertinentes, realizás las pruebas, hacés commit&#8230;y</p>
<blockquote><p>puedo dormir tranquilo.</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://blog.darioquintana.com.ar/2007/09/27/sessionimpl-unit-testing-y-las-flores-siguen-en-la-mesa/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

