09.03.2009

Dojo 66 - Biblioteca de testes em Smalltalk

Postado às 12:06 por

  • Data: 02/03/2009
  • Participantes: Mari, Hugo, Yoshi, Fabricio, Thiago, Lucas, Jorge, Rafael, Breno, Ettore, Adolfo, Gianluca
  • Problema: Biblioteca de testes estilo "BDD" em Smalltalk (Squeak)
  • Código: no github

Insatisfeitos com o SUnit, escolhemos brincar de escrever uma biblioteca de testes mais ao estilo RSpec do Ruby, em Smalltalk. Começamos discutindo as possíveis sintaxes, decidindo por algo como:

(1 = 1) should: #beTrue
1 should: #= to: 1

A implementação foi rolando na classe Object mesmo, em uma categoria especial que adicionamos.

Retrospectiva

Do ruim:

  • Problema muito difícil para o conhecimento coletivo do dojo
  • SUnit não tem muitos recursos
  • A linguagem não tem guru de verdade, ficamos um pouco travados
  • Confundimos: testes, linguagem, ambiente - uma bagunça
  • Post-its amarelos pequenininhos
  • Muita conversa no vermelho: tava difícil?
  • Sintaxe Smalltalk: mais de um argumento exige que tenha palavra entre os argumentos
  • True é classe, true é singleton, otherwise não é true
  • Não tem substring (ou não achamos)
  • Faz tempo que não tem post no blog :-( ==> resolvido!

Do bom:

  • Squeak é igual à mãe do Fabs
  • Muita novidade
  • Terminamos com testes passando - malandramente, mas passando
  • Method finder é da hora
  • Save method WITH STYLE :-)
  • nil
  • Reflexão: "perform: #bla with: arg"
  • Smalltalk é legal, apesar de estranho
  • Symbol é String
  • Solução de bem poucas linhas
  • Pessoas novas, bastante gente
  • Dojo continua muito legal (OBAA! XD)

Das discussões que rolaram durante e depois:

  • Por algum motivo o ambiente do Squeak lembrou o Fabricio do projeto Alice - aprendendo a programar em Java, no qual você escreve programas que controlam bonequinhos 3D para aprender a linguagem.
  • Discutimos "Monkey patch", ou seja, como colocar métodos no Object sem mudar o projeto Kernel do Squeak. Discutimos o conceito, mas não sabemos como fazer isso em Smalltalk, por isso adotamos a solução mais feia, que foi modificar o Kernel mesmo.
  • Colocamos o método "should" no Object... ele deveria existir APENAS quando executando testes. Em produção, uma chamada a "should" deveria idealmente não ser reconhecida.
  • Existe vida além do SUnit! Com um pouco de pesquisa, o Hugo acho o projeto SSpec que parece ser uma biblioteca de testes mais no estilo do que a gente queria. Legal! Como será a solução deles?