<?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>Takenami &#187; J2ME</title>
	<atom:link href="http://www.takenami.com.br/category/j2me/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.takenami.com.br</link>
	<description>Consultoria em TIC</description>
	<lastBuildDate>Fri, 15 Oct 2010 16:18:18 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Testes Unitários com J2MEUnit</title>
		<link>http://www.takenami.com.br/2007/01/28/testes-unitarios-com-j2meunit/</link>
		<comments>http://www.takenami.com.br/2007/01/28/testes-unitarios-com-j2meunit/#comments</comments>
		<pubDate>Sun, 28 Jan 2007 23:36:55 +0000</pubDate>
		<dc:creator>Igor Takenami</dc:creator>
				<category><![CDATA[J2ME]]></category>

		<guid isPermaLink="false">http://www.takenami.com.br/2007/01/28/testes-unitarios-com-j2meunit/</guid>
		<description><![CDATA[A revolução digital populariza o conceito de conectividade avançando cada vez mais em direção a globalização. Nos dias de hoje não basta ter acesso, é preciso estar conectado a todo o momento e a toda hora. O grande impulsionador deste movimento sem sombra de dúvida foi a telefonia celular.
Quem diria que em tão pouco tempo [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.takenami.com.br/wp-content/uploads/2007/01/j2me.png" title="J2me artigo"></a><a href="http://www.takenami.com.br/wp-content/uploads/2007/01/j2me.png" title="J2me artigo"></a><img align="right" src="http://www.takenami.com.br/wp-content/uploads/2007/01/j0431583.png" alt="j2me logo" title="j2me logo" />A revolução digital populariza o conceito de conectividade avançando cada vez mais em direção a globalização. Nos dias de hoje não basta ter acesso, é preciso estar conectado a todo o momento e a toda hora. O grande impulsionador deste movimento sem sombra de dúvida foi a telefonia celular.</p>
<p>Quem diria que em tão pouco tempo aquela &#8220;caixa&#8221; que permitia a comunicação entre pessoas seria um dispositivo tão popular e indispensável ao ser humano se tornando utensílio pessoal como uma peça de roupa ou acessório.</p>
<p>A evolução tecnológica e a popularização destes dispositivos trouxeram uma outra revolução cultural fazendo o ser humano cada vez mais dependente da máquina. Um exemplo disto o número de telefone que antigamente era gravado na memória humana e hoje transferimos esta incumbência para os dispositivos celulares nos tornando cada vez mais dependentes desta onda digital</p>
<p>Graças a esta relação de dependência, os celulares passaram a ter um papel muito maior do que a sua proposta inicial suportando uma série de outros atributos como mp3 player, camera digital, vídeo, etc&#8230; se tornando cada vez mais um computador pessoal portátil.</p>
<p>Diante desta revolução surgem novas áreas de atuação gerando grandes oportunidades no segmento móbile. Estas oportunidades irão gerar uma demanda muito grande por soluções de software embarcado para estes dispositivos. A presença de ferramentas para desenvolvimento e principalmente para testes unitários são imprescindíveis para garantir a qualidade do que esta sendo desenvolvido.</p>
<p><span id="more-28"></span></p>
<p><strong>O QUE É J2ME ?</strong></p>
<p>A plataforma e linguagem JAVA é destinada a 3 grades grupos e mercado. A versão do Java mais conhecida é a J2SE (Java 2 Standat Edition) que define um conjunto de classes e uma maquina virtual (VM) para rodar qualquer tipo de aplicação JAVA em um computador. A outra versão é a J2EE (Java 2 Enterprise Edition) que define um outro conjunto de classes e especificações para desenvolvimento de aplicações JAVA em um ambiente corporativo.</p>
<p>A terceira família é o J2ME (Java 2 Micro Edition) (Figura 1) que é a versão do Java direcionado para os dispositivos portáteis como: celular, PDA ou até mesmo eletrodomésticos. O J2ME é mantido pela SUN Microsystem e seu desenvolvimento é orientado pelo JCP (Java Comunity Process) que é um consorcio de empresas que define as especificações que devem ser oficialmente implementadas para a plataforma.</p>
<p><a href="http://www.takenami.com.br/wp-content/uploads/2007/01/j2me.png" title="J2me artigo"></a><a href="http://www.takenami.com.br/wp-content/uploads/2007/01/j2me.png" title="J2me artigo"></a><a href="http://www.takenami.com.br/wp-content/uploads/2007/01/j2me.png" title="J2me artigo"></a><a href="http://www.takenami.com.br/wp-content/uploads/2007/01/j2me.png" title="J2me artigo"></a></p>
<p style="text-align: center"><img border="0" src="http://www.takenami.com.br/wp-content/uploads/2007/01/j2me.png" alt="J2me artigo" title="J2me artigo" /><br />
Figura 1 &#8211; Versões do JAVA</p>
<p>A plataforma J2ME é dividida em 2 grupo chamados de profiles. Estes profiles são utilizados para classificar os dispositivos suportados pelo J2ME quanto a sua capacidade de processamento e utilização da memória. Os profiles conhecidos são:</p>
<p><strong>(CLDC) Connected Limited Device Configuration</strong> &#8211; Este profile é destinado aos dispositivos com poucos recursos para processamento e uso de memória muito limitada. Aqui se enquadram os celulares e relógios.</p>
<p><strong>(CDC) Connected Device Configuration</strong> &#8211; Este profile é destinado aos dispositivos com um poder maior de processamento e que podem prover mais memória. Neste grupo temos principalmente os PDA&#8217;s e Samrtphones. Este profile também é conhecido como personal profile é pode ser comparado com o J2SE na versão 1.2.</p>
<p>A interface com o usuário para cada profile e completamente diferente já que cada um é destinado a um grupo de dispositivos diferente. A CLDC possui objetos mais primitivos que interagem com o usuário em forma de menus e entrada de dados simples como em um celular convencional. Já a CDC possui recursos de interface mais avançados tendo a possibilidade de utilizar a biblioteca gráfica AWT para criação dos componentes visuais.</p>
<p>O J2ME utiliza como padrão a linguagem JAVA e seus principais objetos. Este objetos porem não são compatíveis com J2SE pois a sua implementação depende do profile que esta sendo utilizado, sendo assim por exemplo o objeto String do J2SE é diferente do objeto String do J2ME.</p>
<p>A VM (Maquina Virtual) do J2ME é definida através de uma especificação que define a sua forma de funcionamento. Os fabricantes implementam estas especificações para seus aparelhos seguindo os seus padrões de navegação, menu e botões. Por isto uma aplicação J2ME apesar de rodar em qualquer dispositivo com suporte a tecnologia possui uma aparência diferente para cada fabricante e muitas vezes modelo de celular.</p>
<p><strong>TESTES UNITÁRIOS (UNITS TEST)</strong></p>
<p>Os testes unitários são utilizados para testar a menor unidade de código possível de ser testada que são as funções. Esta técnica destina-se a testar todas as funções de uma aplicação levando em consideração os valores de entrada e os de saída, sem se prender a como este valores são processados. Os testes são codificados assim o sistema principal e a sua validação é feito através de asserções.</p>
<p>Os testes unitários devem ser planejados e codificados e da mesma forma como um programa, pode ser feito de várias formas. O que deve ser observado no momento de escrever um teste de unidade é a estratégia que será utilizada para validar o teste.</p>
<p>Deve se garantir que a estratégia utilizada é a mais aderente ao seu propósito. Pode-se utilizar também várias estratégias de testes fazendo com que os resultados sejam mais eficientes.</p>
<p>Os testes unitários fazem uso intenso de reflexão. Reflexão é uma técnica utilizada para explorar informações de um objeto sem conhecê-lo, ou seja, em tempo de execução. Através da reflexão a maioria dos Frameworks do mercado, automatiza o processo de fazer, rodar e dar os resultados dos testes unitários.</p>
<p>O uso de testes unitários é muito importante para diminuir os erros decorrentes da programação. A técnica é muito utilizada para programação utilizando métodos ágeis como o XP (Extreme Programing). O principal Framework do mercado foi escrito por Kent Beck, o próprio criado do XP.</p>
<p>No XP a utilização destes testes esta contido de forma direta em um das pratica e citado de forma indireta em várias outras pratica.</p>
<p><strong>J2MEUNIT</strong></p>
<p>O J2MEUnit é um Framework utilizado para fazer testes unitários em projetos desenvolvidos com J2ME. O Framework foi baseado no JUnit e possui as suas principais características. Como o J2MEUnit foi desenvolvido para J2ME, em comparação com o JUnit o mesmo possui uma série de limitações impostas pela tecnologia. A principal delas é o uso de reflexão.</p>
<p>J2ME não possui Reflaxão o que torna a construção dos testes unitários mais trabalhoso e manual, diferente do JUnit. Outro recurso que não podemos contar são as anotações e suporte de IDE&#8217;s.</p>
<p>Como não podemos contar com recursos como reflexão no J2MEUnit, é necessário utilizar um classe Runner que define quais classes contem os testes unitários que serão executados. Esta classe deve estar presente somente para iniciar os testes que são implementados em uma outras classes como descrito no trecho de código abaixo:</p>
<p><code><br />
package takenami.lab2.agenda.testes;<br />
import j2meunit.midletui.TestRunner;<br />
public class AgendaTestRunner extends TestRunner { <br />
public AgendaTestRunner(){} <br />
 protected void startApp() {<br />
  start(new String[] {<br />
  "takenami.lab2.agenda.testes.AgendaTest"        <br />
  });<br />
 }<br />
}<br />
</code></p>
<p>Os testes unitários devem ser implementados em classes que estendem TestCase. Ao estender desta classe automaticamente precisamos escrever os métodos: setUp()  e tearDown()  que são utilizados respectivamente para configurar um ambiente de execução no inicio e no final dos testes.Os métodos que serão testados devem ser implementados em um método Suite e adicionados a um objeto TestSuite, como descrito abaixo:</p>
<p><code>       <br />
public Test suite() {//Cria o objeto com os testes que devem ser feitos<br />
  TestSuite suite = new TestSuite("Testes de persistência da agenda");// teste de novo contato<br />
  suite.addTest(new AgendaTest("Testando novo contato", new   TestMethod() {<br />
            public void run(TestCase tc) throws Exception {<br />
   ((AgendaTest) tc).testNovoContato();<br />
            }<br />
       }<br />
  ));<br />
     <br />
  return suite;<br />
}<br />
</code></p>
<p>Os métodos devem ser implementados dentro da mesma classe de teste e devem conter a estratégia que será utilizada para executar o teste:</p>
<p><code><br />
//Testando um novo contato<br />
public void testNovoContato() throws Exception {<br />
    try {<br />
     rs = RecordStore.openRecordStore("agenda_lab2", true);//Abre o banco de dados<br />
       int numRegs1 = rs.getNumRecords(); //Verifica a quantidade de registros              <br />
        rs.closeRecordStore(); //Fecha o banco de dados<br />
         <br />
      //Chama o objeto de negocio para inserir um novo contato<br />
         agenda.novoContato("Paulo", "77777777");<br />
         <br />
         rs = RecordStore.openRecordStore("agenda_lab2", true); // Abre novamente o RecordStore<br />
         int numRegs2 = rs.getNumRecords(); //Verifica a nova quantidade de registros no banco de dados<br />
         rs.closeRecordStore(); //Fecha o banco de dados<br />
         <br />
         //A estrategia verifica se a qtd de registros anterior + 1 é igual a nova quantidade<br />
         assertEquals("O total de registros deve ser acrescentado de 1",numRegs1+1,numRegs2);} catch (AssertionFailedError e) {<br />
         System.out.println("FALHA");<br />
 }  catch (Exception e) {<br />
         System.out.println("ERRO:" + e.getClass().getName() + " - " + e.getMessage());<br />
 }<br />
}<br />
</code><strong><br />
CONCLUSÃO<br />
</strong><br />
A utilização do J2MEUnit para testes unitários em J2ME é muito importante visto que a pratica é indicada e extremamente necessária quando queremos desenvolver softwares mais estáveis. A limitação do Framework é uma barreira a ser rompida e o crescimento do mercado deve agir de forma direta sobre este fator, pois todos os dias são lançados novos dispositivos mais sofisticados com uma capacidade maior de processamento.Outro ponto que também deve ser melhorando é a integração com IDE&#8217;s disponíveis no mercado já que atualmente nenhuma das opções suportam de forma nativa o J2MEUnit. Isto também é um ponto que em breve deve ser resolvido já que a Eclipse Foudation que fornece o IDE EclipseME anunciou para a próxima versão a integração total com o produto.</p>
<p>Quem já conhece o JUnit não terá problemas com o J2MEUnit pois ele funciona de forma bastante similar. Para quem desenvolve em J2ME e não conhece é necessário aprender, pois certamente será uma opção viável para garantir em partes a qualidade do software.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.takenami.com.br/2007/01/28/testes-unitarios-com-j2meunit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

