Archive for Dezembro, 2007

Dezembro 17th 2007

Integrando PHPUnit com banco de dados

A partir da versão 3.2.0 o PHPUnit conta com uma extensão para fazer testes utilizando banco de dados, na pratica isto já era possível, mas o PHPUnit não contava com nenhum tipo de ferramenta para abstrair tarefas como: inserir dados para fazer testes, deletar dados apos as rotinas de testes, etc.

O fato e que esta extensão do PHPUnit é uma forma elegante de controlar a dependência entre o banco e sua aplicação.

Obs.: Aos que ainda não estão familiarizados com a utilização do PHPUnit recomendo a leitura destes posts:
http://blog.diegotremper.com/archives/15
http://blog.diegotremper.com/archives/97

Exemplo:
Vamos supor que você queira testar um método de sua aplicação que carregue um determinado registro do banco de dados. A questão é: como garantir que quando eu estiver rodando meu teste, o registro que eu vou tentar carregar para afirmar que meu método esta funcionando corretamente, estará lá?

Como você já deve ter pensado, primeiro teremos que inserir o registro na base de dados antes de executarmos nosso teste, e depois da execução, teremos que deletar o registro para que a base de dados não fique com registros inválidos.

Continue Reading »

4 Comments »

Dezembro 5th 2007

array X ArrayIterator == cópia X referência

A questão é a seguinte, imagine que você precise imprimmir todos os elementos de um array, qual a solução para isso? use um foreach, óbvio.

Agora vamo imaginar que dentro deste foreach onde você esta imprimindo os elementos de seu array, tenha alguma lógica que pode adicionar ou não mais elementos ao array que você esta iterando no momento. Ex.:

PHP:
  1. $a = array('PHP', 'Java', 'Ruby');
  2.  
  3. foreach ($a as $value) {
  4.   if ($value == 'PHP') {
  5.     $a[] = 'PHP-GTK';
  6.   }
  7.  
  8.   echo $value . "\r\n";
  9. }

Reparem que no exemplo acima a saida final seria:

PHP
Java
Ruby

E o PHP-GTK por que não imprimiu?
Isto acontece porque o PHP faz com que o foreach trabalhe com um 'cópia' do array que você passou como parametro assim quando você adiciona um elemento para o seus array, não irá influenciar na cópia que esta sendo usada pelo foreach.

Esta situação é facilmente resolvida se você utilizar um objeto que implemente a interface Iterator, como o ArrayIterator por exemplo.

Se você passar um objeto do tipo Iterator como parametro para o comando foreach ele não irá criar uma cópia de seu objeto, irá utilizar a referência. Desta maneira é possível garantir que todos os elementos de seu array serão iterados. Ex.:

PHP:
  1. $a = array('PHP', 'Java', 'Ruby');
  2. $a = new ArrayIterator($a);
  3.  
  4. foreach ($a as $value) {
  5.   if ($value == 'PHP') {
  6.     $a[] = 'PHP-GTK';
  7.   }
  8.  
  9.   echo $value . "\r\n";
  10. }

Espero que a informação tenha sido util, infelizmente na documentação do
PHP este tipo de situação não esta "bem documentada". :P

Abraço a todos.

2 Comments »

Dezembro 1st 2007

Palestra do PHP Conference

Após uma semana cheia de tarefas finalmente o PHP Conference 2007...
Infelizmente não aproveitei praticamente nada do evento, na sexta-feira meu vôo para São Paulo atrasou, assim acabei chegando no final do dia. Já no hotel conheci alguns palestrantes, o pessoal muito gente boa, fomos a uma churrascaria, foi a maior farra. Mas voltando ao que interessa, sábado apresentei minha palestra sobre qualidade de software com o PHPUnit, a palestra não estava completamente lotada, mas haviam muitos conferencistas, o pessoal mostrou interesse pelo assunto. Pelo que percebi, a utilização do PHPUnit ainda não é uma coisa muito comum entre a comunidade, procurei esclarecer as dúvidas de todos, espero ter conseguido. Tive alguns problemas com o projetor e o Ubuntu, então precisei que apresentar utilizando o Windows Vista, foi uma pena, pois havia preparado o ambiente com alguns exemplos legais para a apresentação. Após a palestra, apresentei a alguns conferencistas mais interessados alguns exemplos práticos e algumas configurações necessárias para rodar os softwares que mencionei na palestra.

Aos conferencistas que estiveram em minha palestra espero que tenham gostado, este neste post abro espaço para críticas, sugestões, elogios, etc. No caso de ter ficado alguma dúvida, é só fazer um contato que eu procuro ajudar.

Slides da palestra: Qualidade no desenvolvimento de Software com PHPUnit

Abraço a todos.

9 Comments »