sexta-feira, 30 de abril de 2010

A Solidão de um Developer que Pratica Pair Programming e TDD

Fonte: www.youtube.com/watch?v=LYlhCGng5Mk

Bye see you next post

Kent Beck fala além da programação ágil


Watch live video from Startup Lessons Learned on Justin.tv

Fonte:http://pt-br.justin.tv/startuplessonslearned/b/262656520#r=7zygNLw~&s=li

Bye see you next post

Farb Nivi - Caso de Estudo do Desenvolvimento Ágil


Watch live video from Startup Lessons Learned on Justin.tv

Fonte: http://pt-br.justin.tv/startuplessonslearned/b/262658135#r=7zygNLw~&s=li

Bye see you next post

Desenvolvimento de Clientes 2.0

Desenvolvimento de Clientes 2.0 

Fonte: http://pt-br.justin.tv/startuplessonslearned/b/262670582

Bye see you next post

Startup Lessons Learned Conference Videos

A conferência apresentou uma ampla variedades de oradores com diferentes backgrounds, porém todos eles tinham algo mais ou menos em comum, abraçaram as metodologias que Eric Ries fala em seus artigos e conferências.

Startup Lessons Learned Conference Videos

Fonte: www.arcticstartup.com/2010/04/30/startup-lessons-learned-conference-videos

Bye see you next post

terça-feira, 27 de abril de 2010

Personalidades de Treinadores e Problemas na Transformação para Ágil numa Organização

coach_clipart

Lyssa Adkins sugeriu uma lista de sete tipos de personalidades de treinadores que poderão dar problemas no processo de transformação para ágil numa organização:

  • Spy - gasta apenas o tempo suficiente para observar a equipe na retrospectiva.
  • Seagull - investe em algumas reuniões e voa para longe.
  • Opinionator – tem uma opinião e se apega ao parecer, levando a equipe a perder o interesse nas discussões.
  • Admin - torna-se um intermediário(middle-man) desnecessário para a logística de reuniões e outras tarefas administrativas.
  • Hub - atua como centro de comunicação entre os membros da equipe.
  • Butterfly – volteia equipe e não foca o suficiente.
  • Expert – detalhamento muito orientando, mas perde o todo(a visão do todo).

Fonte: http://www.infoq.com/news/2010/04/caution-agile-transformation

Bye see you next post

segunda-feira, 26 de abril de 2010

Motivando funcionários sem dinheiro

motivacao
Apenas 1 em cada 5 funcionários colaboram para uma empresa ter sucesso. Há um mito que dinheiro motiva as pessoas. A realidade é que a motivação dos colaboradores sem dinheiro é a melhor. Então, quais são os fatores que motivam os empregados? Em 2008 Businessweek tinha um artigo que listava os fatores que motivam os funcionários:
  • Capacitação para tomar decisões;
  • Oportunidades para o crescimento e desenvolvimento;
  • Variedade;
  • Apoio mútuo e respeito;
  • Senso de Objetivo;
  • Futuro desejável.

O dinheiro embora ainda seja um fator, não é mais importante na motivação. Um sistema empresarial lean que é implementado corretamente, realmente cuida de todos os fatores.

Capacitação para tomar decisões: No sistema de negócios lean as pessoas não apenas são capacitadas para tomar decisões, mas as pessoas esperam para decidir e avançar na solução.

Oportunidades para o Crescimento e Desenvolvimento & Variedade: Cross-Training é um inquilino de um sistema de negócios lean. Proporcionando uma força de trabalho flexível e dando oportunidade de crescimento para os funcionários.

Apoio mútuo e  respeito: Respeito às pessoas é o fundamental de qualquer sistema de negócios lean. Manter um fórum com participação de todos os funcionários como listas de questões e soluções para resolver problemas. E motivar o trabalho em equipe. O maior impacto é quando é transferida a culpa do funcionário para o sistema.  É necessário manter os funcionários responsáveis, mas é preciso saber se a falha no sistema ou é uma questão de responsabilização. O artigo sugere assumir o erro de sistema pela primeira vez e se o erro persistir depois que o sistema foi corrigido, então é uma questão de julgamento.

Senso de Objetivo: Os objetivos são alinhados e há uma meta  definida para ser alcançada. Dando um objetivo claro aos funcionários, gerenciamento do senso de direção e propósito para um objetivo. Fornecendo um ambiente de trabalho seguro e motivador, algumas vezes beneficiando a família. Senso de objetivo vem sem dinheiro para descobrir o que é importante para os funcionários conversando com eles.

Futuro desejável: o sistema de negócios lean posiciona empresa para o crescimento. Uma empresa próspera com muitas oportunidades e uma grande cultura que respeite as pessoas é  onde as mesmas querem trabalhar. Isto amarrado em senso de objetivo, bem como no fator de motivar os funcionários sem dinheiro. Conforme a empresa cresce, poderá recompensar os funcionários.

Motivar os funcionários sem dinheiro se torna mais fácil com um sistema de negócios lean. Há muitos outros benefícios adicionais no sistema de negócios lean, incluindo os custos operacionais reduzidos e mais vendas.

Fonte: http://biznik.com/members/ankit-patel/articles/motivating-employees-without-money by Ankit Patel

Bye see you next post

domingo, 25 de abril de 2010

Evite Hope Driven Development (HDD), o câncer do desenvolvimento

cama 

HDD é o processo de desenvolvimento de software onde as decisões e códigos são feitas com base em suposições.

HDD não se aplica apenas na codificação, todas as fases de processo de desenvolvimento de software podem sofrer o HDD.

Todo mundo percebe que HDD é ruim, mas ainda continuam fazendo. Uma das explicações para continuar fazendo HDD é excesso de otimismo dos desenvolvedores de software.

Os sintomas para saber se você está usando HDD:

  • Usa palavras como: "deverá", "Eu acho que sim”…
  • Não tem testes unitários;
  • Há mais preocupação com o desempenho de código. Conseqüentemente, suprimem validações adicionais ou lógicas para manipulações de erros, devido à possibilidade de causar desempenho ruim. O Recomendável é fazer o código e depois otimizá-lo;
  • Não tem demos freqüentes e opiniões com o cliente e equipe.

Dicas para evitar HDD

  • Toda vez que ouvir "deve" ou "acho que" traduzi-lo para "Eu não tenho a menor idéia";
  • Fazer testes unitários;
  • Primeiro se preocupar com a qualidade de código, logo após melhorar o desempenho;
  • Comunicação.

Fonte: http://www.makinggoodsoftware.com/2009/05/12/hdd/

by Alberto Gutierrez

Bye see you next post

sábado, 24 de abril de 2010

18 minutos com uma mente ágil: Clifford Stoll na TED

Clifford Stoll poderia falar sobre a atmosfera de Júpiter. Ou caça hackers KGB. Ou garrafas de Klein, os computadores nas salas de aula, o futuro. Mas ele não vai. Em vez disso, ele simplesmente cativa seu público com uma pitada descontroladamente energética de anedotas, observações, para além - e até mesmo experimentar uma ciência.

Afinal de contas, por sua própria definição, ele é um cientista: "Quando eu faço algo, eu quero fazer outra coisa." (Duração fevereiro 2006 Gravado em Monterey, na Califórnia.: 17:50).

Este é um vídeo muito perspicaz. E uma grande lição sobre como fazer uma apresentação.

fonte: http://ow.ly/1Cz6M

Bye see you next post

Testes Unitários Usando Injeção de Dependência

Mostrarei um simples exemplo usando testes unitários na linguagem Java. O nome da minha classe é Bairro e vai usar hibernate como framework de persistência.

Para fazer a injeção de dependência usarei neste exemplo o framework Spring. Mas fique a vontade para escolher outro framework conforme linguagem e gosto.

O pojo de Bairro

@Entity

@Table(name = "bairro")

public class Bairro {

    @Id

    @GeneratedValue

    @Column(name = "id", nullable = false)

    private Long id;

    @Column(name = "nome")

    private String nome;

    public Long getId() {

        return id;

    }

    public void setId(Long id) {

        this.id = id;

    }

    public String getNome() {

        return nome;

    }

    public void setNome(String nome) {

        this.nome = nome;

    }

}

Aqui tenho a interface BairroDAO com operações simples do CRUD

public interface BairroDAO {

    public boolean criar(Bairro b);

    public boolean deletar(Long id);

    public boolean atualizar(String nome, Long id);

    public Bairro load(Long id);

}

Implementação da interface usando Hibernate

public class BairroDAOImpl implements BairroDAO {

    public boolean criar(Bairro b) {

        boolean retorno = false;

        Session session = HibernateUtil.getSessionFactory().openSession();

        Transaction transaction = session.beginTransaction();

        try {

            session.save(b);

            transaction.commit();

            retorno = true;

        } catch (HibernateException e) {

            retorno = false;

            transaction.rollback();

        } finally {

            session.close();

        }

        return retorno;

    }

    public boolean deletar(Long id) {

        boolean retorno = false;

        Session session = HibernateUtil.getSessionFactory().openSession();

        Bairro b = (Bairro) session.load(Bairro.class, id);

        Transaction transaction = session.beginTransaction();

        try {

            session.delete(b);

            transaction.commit();

            retorno = true;

        } catch (HibernateException e) {

            retorno = false;

            transaction.rollback();

        } finally {

            session.close();

        }

        return retorno;

    }

    public boolean atualizar(String nome,Long id) {

        boolean retorno = false;

        Session session = HibernateUtil.getSessionFactory().openSession();

Bairro b = (Bairro) session.load(Bairro.class, id);

        b.setNome(nome);

Transaction transaction = session.beginTransaction();

        try {

            session.update(b);

            transaction.commit();

            retorno = true;

        } catch (HibernateException e) {

            retorno = false;

            transaction.rollback();

        } finally {

            session.close();

        }

        return retorno;

    }

public Bairro load(Long id) {

        Bairro bairro = null;

Session session = HibernateUtil.getSessionFactory().openSession();

bairro = (Bairro) session.load(Bairro.class, id);

        session.close();

        return bairro;

    }

}

O hibernate.cfg.xml do hibernate para mostrar o devido mapeamento do pojo Bairro

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-configuration PUBLIC

        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>

<!--  Database connection settings –>

<property name="hibernate.connection.driver_class">

        com.mysql.jdbc.Driver

    </property>

   <property name="hibernate.connection.url">

        jdbc:mysql://localhost/java

    </property>

    <property name="hibernate.connection.username">root</property>

<!--  SQL dialect -->

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

<!--  JDBC connection pool (use the built-in) -->

<property name="connection.pool_size">2</property>

<!--  Enable Hibernate's current session context -->

<property name="current_session_context_class">thread</property>

<!--  Disable the second-level cache  -->

<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

<!--  Echo all executed SQL to stdout –->

<property name="show_sql">true</property>

<property name="hbm2ddl.auto">none</property>

<mapping class="…Bairro"/>

</session-factory>

</hibernate-configuration>

Classe de negócios que vai realizar as operações em bairro e vai ser usado na classe de teste

A classe de negócios depende da classe BairroDAOImpl. Mas estou usando a interface BairroDAO. Como realizarei a ligação com classe  BairroDAOImpl? Precisarei da injeção de dependência que será feita no serviço setBairroDAO e com ajuda do framework Spring.

public class BairroBusinessRules {

    private BairroDAO bairroDAO;

    public BairroBusinessRules() {

        super();

        // TODO Auto-generated constructor stub

    }

    public void setBairroDAO(BairroDAO bairroDAO) {

        this.bairroDAO = bairroDAO;

    }

    public boolean criar(Bairro b){

        return this.bairroDAO.criar(b);

    }

    public boolean deletar(Long id){

        return this.bairroDAO.deletar(id);

    }

    public boolean atualizar(String nome, Long id){

        return this.bairroDAO.atualizar(nome, id);

    }

    public Bairro load(Long id){

        return this.bairroDAO.load(id);

    }

}

Mapeamento no Spring da injeção de dependência

Classe BairroBusinessRules depende de BairroDAOImpl. Faço a injeção de dependência através da atribuição do myBairro (instância de BairroDAOImpl) para atributo bairroDAO da classe BairroBusinessRules.

<bean id="myBairro" class="....BairroDAOImpl"/>

<bean id="bairroBusinessRules" class="….BairroBusinessRules">

            <property name="bairroDAO" ref="myBairro"/> 

   </bean>

Classe de testes

Note que estou pegando BairroBusinessRules através do Spring, fazendo isto estou desencadeando a injeção de dependência descrita no XML do mapeamento do Spring:

public class TestBairro2 extends TestCase {

    private BairroBusinessRules testBairro;

    public void setUp() throws Exception {

        ApplicationContext factory = new ClassPathXmlApplicationContext("contextApplication.xml");

        this.testBairro = (BairroBusinessRules) factory.getBean ("bairroBusinessRules");

    }

@Test

    public void testCriar() throws Exception {

        Bairro b = new Bairro();

        b.setNome("Anchieta");

        Bairro b1 = new Bairro();

        b1.setNome("Boa Vista");

        Assert.assertTrue(testBairro.criar(b));

        Assert.assertTrue(testBairro.criar(b1));

         b1.setNome("cristo redentor");

         Assert.assertTrue(testBairro.criar(b1));

    }

    @Test

    public void testDeletar() throws Exception {

        Assert.assertTrue(testBairro.deletar(new Long(20)));

    }

    @Test

    public void testAtualizar() throws Exception {

        Assert.assertTrue(testBairro.atualizar("Humaita",new Long(14)));

    }

    @Test

    public void testLoadNotNull() throws Exception {

        Assert.assertNotNull(testBairro.load(new Long(16)));

    }

}

clip_image001

Bye see you next post

sexta-feira, 23 de abril de 2010

InfoQ: Cálculo do lead time em user stories

Utilização do lead time para controlar e calcular o tempo total de uma user story utilizada no scrum:

InfoQ: Cálculo do lead time em user stories

Bye see you next post

sexta-feira, 16 de abril de 2010

Stub para Testes Unitários

Resolvi fazer um pequeno exemplo do uso do stub para testes unitários.

Stub provê alguns dados que serão usados no teste.

No exemplo, a classe Pedido esta sendo testada no preenchimento do telefone, usei a classe Cliente somente para passar o telefone que é forma de passar parâmetro. Não estou usando acesso a banco de dados, somente simulando com objetos:

import junit.framework.Assert;
import junit.framework.TestCase;

import org.junit.Test;
public class TestPedido2 extends TestCase {
    @Test
    public void testPreencheTelefone() throws Exception {
        Pedido pedido = new Pedido(new Long(3), new Long(45));
        pedido.preencheTelefone(new Cliente("51320066666"));
        Assert.assertEquals("51320066666", pedido.getTelefone());
    }

}

Estou usando JUnit:

testestub

O serviço testePreencheTelefone passou com sucesso.

Fonte: http://xunitpatterns.com/Mocks,%20Fakes,%20Stubs%20and%20Dummies.html

e

Apresentação sobre Injeção de Dependência e Testes com Dublês (Dummy Object, Stub, Mocks, Fake Objects, Spy) feita no 2o. Locaweb TechDay por Daniel Cukier http://vimeo.com/3596692

Bye see you next post

terça-feira, 13 de abril de 2010

Locaweb Techday - Integração Contínua

Locaweb Techday - Integração Contínua from Locaweb on Vimeo.

Apresentação de Maurício Dediana das práticas defendidas por Kent Beck na metodologia XP: Integração Contínua.

Bye see you next post

Locaweb Techday - Injeção de Dependência e Testes com Dublês

Locaweb Techday - Injeção de Dependência e Testes com Dublês from Locaweb on Vimeo.

Palestra sobre Injeção de Dependência e Testes com Dublês (Dummy Object, Stub, Mocks, Fake Objects, Spy) por Daniel Cukier

Bye see you next post

2o. Locaweb TechDay - Software de Qualidade através de Testes Automatizados

Locaweb Techday - Software de Qualidade através de Testes Automatizados from Locaweb on Vimeo.

Palestra de Desenvolvimento de Software de Qualidade através de Testes Automatizados apresentada por Fabio Kon e Paulo Cheque-Agilcoop.

Bye see you next post

terça-feira, 6 de abril de 2010

Testando o Pojo do Hibernate usando Junit

Antes de implantar qualquer pojo convém testá-lo exaustivamente. Estou usando testes unitário junit para avaliar o pojo.

Tenho serviço reset para limpar a base de dados que é mysql quando precisar.

Além do serviço reset, tem outros serviços de testes: adicionar, deletar e atualizar.

Uso apenas uma tabela que é bairro, mas devemos testar todo o pojo para verificar problemas antes de implantar.

Classe de Testes Unitário do Pojo:

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

import junit.framework.Assert;
import junit.framework.TestCase;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

public class TestPojo extends TestCase {

    public void setUp() throws Exception {
        //TestPojo.reset();
    }

    @Test
    public void testCriar() throws Exception {
        Bairro b = new Bairro();
        b.setNome("Anchieta");
        Bairro b1 = new Bairro();
        b1.setNome("Boa Vista");
        Assert.assertTrue(TestPojo.criar(b));
        Assert.assertTrue(TestPojo.criar(b1));
    }
    @Test
    public void testDeletar() throws Exception {
        Assert.assertTrue(TestPojo.deletar());
    }
    @Test
    public void testAtualizar() throws Exception {
        Assert.assertTrue(TestPojo.atualizar());
    }

    @SuppressWarnings("finally")
    public static boolean criar(Bairro b) {
        boolean retorno = false;

        Session session = HibernateUtil.getSessionFactory().openSession();

        Transaction transaction = session.beginTransaction();
        try {
            session.save(b);
            transaction.commit();
            retorno = true;
        } catch(HibernateException e){
            retorno=false;
            transaction.rollback();
        } finally {
            session.close(); 
         }

            return retorno; 
    }

    public static boolean deletar()  {
        boolean retorno = false;

        Session session = HibernateUtil.getSessionFactory().openSession();

        Bairro b= (Bairro) session.load(Bairro.class, new Long(13));

        Transaction transaction = session.beginTransaction();
        try {
            session.delete(b);
            transaction.commit();
            retorno = true;
        } catch(HibernateException e){
            retorno=false;
            transaction.rollback();
        } finally {
            session.close();
        }
        return retorno;
    }

    public static boolean atualizar()  {
        boolean retorno = false;

        Session session = HibernateUtil.getSessionFactory().openSession();

        Bairro b= (Bairro) session.load(Bairro.class, new Long(14));
        b.setNome("Vila Mario Quintana");
        Transaction transaction = session.beginTransaction();
        try {
            session.update(b);
            transaction.commit();
            retorno = true;
        } catch(HibernateException e){
            retorno=false;
            transaction.rollback();
        } finally {

            session.close();
        }
        return retorno;
    }

    @SuppressWarnings("deprecation")
    public static void reset() throws Exception {
        Session session = HibernateUtil.getSessionFactory().openSession();
        try {
            Connection connection = session.connection();
            try {
                Statement statement = connection.createStatement();
                try {
                    statement.executeUpdate("delete from bairro");

                    connection.commit();
                } finally {
                    statement.close();
                }
            } catch (HibernateException e) {

                connection.rollback();
                throw new Exception(e);
            } catch (SQLException e) {
                connection.rollback();
                throw new Exception(e);
            }
        } catch (SQLException e) {
            throw new Exception(e);
        } finally {
            session.close();
        }
    }

}

Pojo:

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "bairro")
public class Bairro {
    @Id
    @GeneratedValue
    @Column(name = "id", nullable = false)
    private Long id;

    @Column(name = "nome")
    private String nome;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

}

Hibernate.cfg.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
    <property name="hibernate.connection.driver_class">
        com.mysql.jdbc.Driver
    </property>
    <property name="hibernate.connection.url">
        jdbc:mysql://localhost/java
    </property>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.username">root</property>
    <property name="connection.pool_size">1</property>
    <property name="current_session_context_class">thread</property>
    <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
    <property name="show_sql">true</property>
    <property name="hbm2ddl.auto">none</property>
    <mapping class="...Bairro"/>
    </session-factory>
</hibernate-configuration>

 

Fonte: www.theserverside.com/news/1365222/Unit-Testing-Hibernate-With-HSQLDB

Bye see you next you

sábado, 3 de abril de 2010

CRUD com Testes Unitários JUnit 4.7

Através deste tutorial pretendo mostrar um exemplo de aplicação de acesso ao banco de dados (CRUD) com testes de unidade.
Estou usando Eclipse Galileu e JUnit 4.7, porém fique a vontade para escolher o Eclipse IDE e JUnit.

Os testes de unidade são implementados antes do código da funcionalidade.

Fluxo do TDD:

  • Escrever o teste unitário;
  • Fazer o teste quebrar;
  • Escrever o código;
  • Fazer o teste passar;
  • Refatorar.

tdd


O que é um teste automatizado?

  • Um código que testa outro código e analisa o resultado.
  • O código poderá ser executado muitas vezes.
O que faz testes de unidade?
  • Testa geralmente uma classe;
  • Não deve se preocupar com outros módulos;
  • Teste tipo caixa branca;
  • Foca sempre o negócio e não a implementação.

Set Up e Tear Down(organização do teste)

  • Set Up: Prepara o ambiente para teste;
  • Tear Down: Limpa o ambiente.

Configuração do Java Build Path com JUnit 4.7
Download do Junit e documentação: http://www.junit.org/

javabuild

Código do CRUD Fone Pessoa Física

Interface do DAO Fone Pessoa Física

public interface FoneFisicaDAO {
    public List<FoneFisica> buscarFones(int id);
    public FoneFisica buscarFone(int id);
    public boolean criar(int idpessoafisica, String fone);
    public boolean alterar(int id, String fone);
    public boolean excluir(int id);

}

Implementação da Interface Dao Fone Pessoa Física

Não coloquei implementação, porque isto fica a critério de cada projeto. Fique a vontade para hibernate, outro framework de persistência ou jdbc.

public class FoneFisicaDAOImpl implements FoneFisicaDAO{

public List buscarFones(int id) {

....

}

public FoneFisica buscarFone(int id) {

....

}

public boolean criar( int idpessoafisica, String fone) {

....

}

public boolean alterar(int id, String fone) {

....

}

public boolean excluir(int id) {

....

}

}

Implementação da parte de negócios do Fone Fisica é chamada FoneFisicaBusinessRules que utiliza a interface para chamar os serviços do DAO, não estou utilizando nenhum framework para IoC. Se houver a necessidade de ligação das classe FoneFisicaBusinessRules e FoneFisicaDAOImpl, terá que ser feito através de IoC.

public class FoneFisicaBusinessRules {
    private FoneFisicaDAO foneFisicaDAO;
    private FoneFisicaDAOImpl foneFisicaDAOimpl;

    public FoneFisicaBusinessRules(FoneFisicaDAO dao) {
        this.foneFisicaDAO = new FoneFisicaDAOImpl() ;
    }
    public List<FoneFisica> buscarFones(int id){
        return this.foneFisicaDAO.buscarFones(id);
    }
    public FoneFisica buscarFone(int id){
        return this.foneFisicaDAO.buscarFone(id);
    }
    public boolean criar(int idpessoafisica, String fone){
        return this.foneFisicaDAO.criar(idpessoafisica, fone);
    }
    public boolean alterar(int id, String fone){
        return this.foneFisicaDAO.alterar(id, fone);
    }
    public boolean excluir(int id){
        return this.foneFisicaDAO.excluir(id);
    }

}

Testes de unidade

import junit.framework.TestCase;

import org.junit.Assert;
import org.junit.Test;

import br.com.madeira.pessoa.businessrules.FoneFisicaBusinessRules;
import br.com.madeira.pessoa.daoimpl.FoneFisicaDAOImpl;
import br.com.madeira.pessoa.domain.FoneFisica;

public class FoneFisicaTest extends TestCase {
    private FoneFisicaBusinessRules testFoneFisica;

    public void setUp() {
        testFoneFisica = new FoneFisicaBusinessRules(new FoneFisicaDAOImpl()); Fazendo uma injeção de dependência através do construtor. 

    }

    @Test
    public void testBuscaFone() {
        FoneFisica f = testFoneFisica.buscarFone(3);
        Assert.assertNotNull(f);

    }

    @Test
    public void testCriarFone() {
        boolean b = testFoneFisica.criar(3, "6666665");
        Assert.assertTrue(b);

    }

}

Como rodar JUnit?

Clique no botão direito no projeto e escolha a opção Run as -> JUnit test.

Nesta janela temos o retorno em verde de tudo que esta ok no teste com o nome do teste, o que esta em azul com x falhou no teste.

junit

 

Fonte: http://ccsl.ime.usp.br/agilcoop/
e

http://www.junit.org/

"Nós somos o que fazemos repetidamente. Excelência, não é uma ação isolada, mas um hábito" - Aristóteles

Bye see you next post