Feeds:
Posts
Comentários

Archive for the ‘TDD’ Category

Bem, demorei mais do que havia planejado para escrever esse post. Nesse post eu vou falar sobre TDD com Test Doubles.

Para começar a apresentar os conceitos de Test Doubles, pedi para eles desenvolverem uma aplicação simples que deveria se conectar a um web-service que eu estava disponibilizando. Todos desenvolveram a aplicação utilizando TDD, so far so good. Então eu alterei o código do meu web-service, em um momento dei um sleep de 180 segundos e depois fiz ele lançar uma exceção.

Utilizei essas duas situações para mostrar um exemplo onde a utilização de Test Doubles: quando o sistema/classe depende de um recurso externo e/ou lento (acesso a rede ou disco por exemplo). Em seguida, eles fizeram outros testes, agora utilizando um mock e outro utlizando um stub que nós criamos.

Continuando comentei com eles outros benefícios de se utilizar Test Doubles, como o fato de você poder testar uma classe, sem que todas as classes do qual ela depende já estejam implementadas. Por exemplo, utilizando a idéia do web-service, se você está implementando uma classe que irá utilizar um cliente do web-service para pegar uma lista de tags para apresentar quais são as tags mais utilizadas. Abaixo um pedaço de código, demonstrando como a classe utiliza o cliente do web-service.

class TagsGenerator {
	private $client;
	public function __construct(WebServiceClient $client){
		$this->client = $client;
	}
	private function buildTagList(){
		$list = $this->client->getTagList();
                // código omitido
	}
        // demais métodos omitidos
}

Claro que você está sempre programando para a interface, então WebServiceClient é uma interface e não uma classe. Veja então que eu vou poder testar essa minha classe, antes mesmo que haja alguma implementação para a interface WebServiceClient. Aproveitei também esse exemplo para comentar mais sobre inversão de controle(IoC). Abaixo um exemplo de um método de teste.

	public function testShouldReturnMusicAsTopOneTag(){
        $stub = $this->getMock('WebServiceClient');
        $stub->expects($this->any())
             ->method('getTagList')
             ->will($this->returnValue(array('Music','Games','Videos')));
        // aqui, usando IoC e um stub eu posso testar
        // minha classe que constrói a lista de tags
        $generator = new TagsGenerator($stub);
        // resto do teste abaixo
	}

Outro benefício que pode ser alcançado com uma boa OO e test doubles é o isolamento entre testes. Além disso, comentei sobre o Mocks Aren’t Stubs do Fowler, que fala sobre as diferentes formas de se utilizar TDD, classicist ou mockist e citei que na minha opinião a melhor abordagem é saber utilizar bem as duas formas de TDD.

Final se semana escreverei outro post, comentando como foi feito o TDD com banco de dados.

Anúncios

Read Full Post »

Achei duas apresentações que Miško Hevery fez no google (onde ele trabalha), estão no youtube com o título The Clean Code Talks (nome bastante sugestivo), por enquanto só assisti uma e achei boa, então ficam aqui os vídeos.

Read Full Post »

Mock Dialogue

Mock Dialogue é outra apresentação que teve na Ruby Hoedown 2008, essa foi feita por Joe O’Brien e Jim Weirich.

Essa apresentação foi feita forma de diálogo, um teatro. Um desenvolvedor  está iniciando com mocks/stubs/fakes e o outro desenvolvedor já conhece e utiliza mocks/stubs/fakes e vai ensinando para o outro. A apresentação é dividida em 3 atos, em cada ato esse desenvolvedor aprende algo e as questões para o próximo ato ficam mais interessantes.

Nessa apresentação você vai ver sobre boas práticas ao utilizar TDD, mocks, stubs, fakes, fluent interface, flexmock x mocha, overmocking entre outros.

Read Full Post »

Test All The Fucking Time é o título de uma Lightning Talk que Brian Liles fez na Ruby Hoedown 2008.

São apenas 12 minutos, onde a mensagem principal é: Test All The Fucking Time!

Vale a pena assitir!

Read Full Post »

Já fiz minha pré-inscrição para o 1º Seminário Catarinense de Qualidade e Teste de Software.

Olhando as palestra, acho que a maior parte vai ser enrolação e/ou propaganda, mas mesmo assim acho que vai valer a pena dar um pulo até Floripa.

Fica aí a dica, mais alguém vai estar presente por lá?

Read Full Post »

No embalo do post de ontem, outro artigo do Miško Hevery com coisas que você deve evitar no seu projeto.

Nada de novo, nada de excepcional, mas são regras que você deve ter sempre em mente (talvez escrito em algum cartaz em uma parede/quadro) enquanto programa.

Read Full Post »

Este artigo, escrito por “Miško Hevery, Jonathan Wolter, Russ Ruffer, Brad Cross, and lots of other test infected Googlers” tem um ótima lista de coisas que você não deveria estar fazendo com seu código… é uma lista bem completa, leitura recomendada!

Read Full Post »

Older Posts »