<?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; Mocking</title>
	<atom:link href="http://blog.darioquintana.com.ar/category/mocking/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>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>
	</channel>
</rss>

