<?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>Blog do PacMan &#187; Mock</title>
	<atom:link href="http://pacman.blog.br/blog/tag/mock/feed/" rel="self" type="application/rss+xml" />
	<link>http://pacman.blog.br/blog</link>
	<description>Varias Coisas, por Tiago Peczenyj</description>
	<lastBuildDate>Thu, 15 Jul 2010 02:04:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>JMock &#8211; trabalhando com mock objets em java</title>
		<link>http://pacman.blog.br/blog/dicas/jmock-trabalhando-com-mock-objets-em-java/</link>
		<comments>http://pacman.blog.br/blog/dicas/jmock-trabalhando-com-mock-objets-em-java/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 00:05:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Mock]]></category>
		<category><![CDATA[teste]]></category>

		<guid isPermaLink="false">http://pacman.blog.br/blog/?p=78</guid>
		<description><![CDATA[Lendo sobre testes unitarios, imagine o caso onde o seu teste é complexo: um objeto que chama outro e, então, realiza as suas tarefas. Um bom caso é um DAO que acessa o banco de dados para fazer alguma coisa: &#8230; <a href="http://pacman.blog.br/blog/dicas/jmock-trabalhando-com-mock-objets-em-java/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Lendo sobre <a href="http://vidageek.net/2009/03/13/por-tudo-que-e-sagrado-escrevam-testes/">testes</a> <a href="http://gc.blog.br/2008/03/30/test-infection-por-onde-comecar/">unitarios</a>, imagine o caso onde o seu teste é complexo: um objeto que chama outro e, então, realiza as suas tarefas. Um bom caso é um DAO que acessa o banco de dados para fazer alguma coisa: se vc pensa em testar esse codigo de forma unitaria teria que subir um banco de testes e, se encontrasse um problema, poderia ser dificil dizer se é problema do DAO ou dos objetos que ele depende (como a conexão com o banco, ou o banco em si).</p>
<p>A solução para estes casos pode ser trabalhar com mocks: objetos &#8220;burros&#8221; que podem não ter nenhuma função alem de responder ao que vc especificou. A abordagem mais utilizada é vc programar estes objetos para responder a um ou mais metodos com argumentos especificos, assim como as respostas esperadas. No caso do DAO eu posso esperar um determinado SQL e especificar uma determinada resposta, tudo de acordo com o meu cenario de teste.</p>
<p>É claro que <a href="http://gc.blog.br/2007/08/28/mock-objects-em-excesso-podem-atrapalhar/">Mock Objects em excesso podem atrapalhar</a>, mas é tudo uma questão de bom senso: costumo dizer para quem esta começando a focar os testes nas partes mais importantes do sistema, o core do modelo e regras de negocio e, então, incrementar estas praticas caso veja necessidade. Sem falar que volta e meia surge algo <a href="http://gc.blog.br/2008/07/16/livro-promissor-sobre-mock-objects/">novo</a>.</p>
<p>Para java existe o excelente framework <a href="www.jmock.org">JMock</a>. Logo de cara o site oficial traz um exemplo de como utilizar um mock bem simples (incluindo a integração do mesmo com JUnit 4)</p>
<p>http://www.jmock.org/getting-started.html</p>
<p>Para entender, imagine esta interface</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">interface</span> Subscriber <span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">void</span> receive<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> message<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Imagine que eu tenho um objeto do tipo Publisher que, ao invocar o metodo publish(message), ele envie esta mensagem para um Subscriber (que recebe com o metodo acima). Para testar o publish eu teria que me certificar que o metodo receive deste objeto Subscriber foi invocado com a mensagem especificada, mais ou menos assim:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.jmock.integration.junit4.JMock</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.jmock.integration.junit4.JUnit4Mockery</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.jmock.Expectations</span><span style="color: #339933;">;</span>
&nbsp;
@RunWith<span style="color: #009900;">&#40;</span>JMock.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span>
<span style="color: #000000; font-weight: bold;">class</span> PublisherTest <span style="color: #009900;">&#123;</span>
    Mockery context <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> JUnit4Mockery<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    @Test
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> oneSubscriberReceivesAMessage<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// set up</span>
        <span style="color: #000000; font-weight: bold;">final</span> Subscriber subscriber <span style="color: #339933;">=</span> context.<span style="color: #006633;">mock</span><span style="color: #009900;">&#40;</span>Subscriber.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        Publisher publisher <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Publisher<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// objeto que vou testar</span>
        publisher.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>subscriber<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// tenho que adicionar o mock!</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">String</span> message <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;message&quot;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// aqui eu programo o que eu espero do teste</span>
        context.<span style="color: #006633;">checking</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Expectations<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#123;</span>
            oneOf <span style="color: #009900;">&#40;</span>subscriber<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">receive</span><span style="color: #009900;">&#40;</span>message<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// aqui eu executo!</span>
        publisher.<span style="color: #006633;">publish</span><span style="color: #009900;">&#40;</span>message<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Facil?</p>
]]></content:encoded>
			<wfw:commentRss>http://pacman.blog.br/blog/dicas/jmock-trabalhando-com-mock-objets-em-java/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
