Bom pessoal, depois do muito tempo parado ja esta na hora de fazer um post ne? E para voltar bem, vou falar um pouco sobre a Should-DSL. Ela e um projeto iniciado pelos amigos e colegas de trabalho, Hugo Lopes Tavares e Rodrigo Manhaes.Mas o que e essa porcaria?Porcaria porra nenhuma nada! Foi uma ideia genial. A Should-DSL e uma DSL (Domain Specific Language), como o proprio nome diz, para Python. Ela foi criada para tornar as expectations dos testes, sejam eles unitarios, de integracao, etc, mais bonitinhas intuitivas e completas. Vejamos um exemplo de teste simples feito com python e unittest.[python]from unittest import *from calculadora import calculadora class TestCalculadora(unittest.TestCase): def test_soma(self): self.calculadora = calculadora() self.assertEquals(calculadora.soma(1,1), 2)[/python]Perceba que o metodo que realiza o teste propriamente dito, na ultima linha e uma merda feio pra diabo meio dark. Vejamos como ficaria isso usando a Should-DSL.[python]from unittest import *from should_dsl import *from calculadora import calculadora class TestCalculadora(unittest.TestCase): def test_soma(self): self.calculadora = calculadora() calculadora.soma(1,1) |should| equal_to(2)[/python]O que achou? O metodo de teste nao esta muito mais legivel e expressivo? Chamamos a funcao "equal_to", utilizada no codigo, de matcher. A Shoud-DSL ja possui varios matchers embutidos, alem de suportar a criacao de custom matchers. E esses custom matchers podem ser definidos como simples funcoes ou como classes, em casos de matchers mais complexos.Veja um exemplo de teste de validacao de um objeto usando uma coisa macabra muito interessante. Suponha que voce tenha uma classe Number e voce quer se certificar de que um objeto Number qualquer represente um numero primo. Veja o codigo:[python]Number(57) |should| be_prime[/python]Simples nao e? Isso e o que chamamos de um predicate matcher. Quando esse codigo e executado a DSL procura por um metodo chamado "prime" dentro do objeto Number e automaticamente o chama, esperando um resultado verdadeiro. E como ficaria esse codigo sem a Should-DSL?[python]assertTrue(Number(57).prime)[/python]Um matcher bem interessante tambem e o "change". Ele verifica se um devido metodo causou uma mudanca numa certa variavel. E voce ainda pode especificar em qual quantidade essa variavel tem que ser modificada. Veja um exemplo:[python]class Box(object): def __init__(self): self.items = [] def item_count(self): return len(self.items) def add_items(self, *items): for item in items: self.items.append(item)[/python]Agora o teste:[python]caixa = Box()(caixa.add_items, 1, 2, 3) |should| change(caixa.item_count).by(3)[/python]Como voce faria isso sem Should-DSL hein? Nao gosto nem de tentar imaginar... Esta interessado em instalar a Should-DSL? E tao simples como utiliza-la: sudo pip install should-dslEnfim, essa foi um pequena demonstracao do poder sobrenatural da legibilidade, expressividade e facilidade que a Should-DSL pode trazer aos seus testes. Se voce esta interessado em conhecer mais sobre essa incrivel ferramenta, desenvolvida por Hugo Lopes Tavares e Rodrigo Manhaes, acesse o repositorio do GitHub da Should-DSL. La voce encontrara um bom README ensinando como usar os mais diversos matchers da ferramentas e tambem podera ver e baixar o codigo fonte dela para modificiar a seu proprio gosto ou entender como a mesma foi desenvolvida.Use e abuse. Qualquer duvida e so comentar que farei o possivel para ajudar. Ate a proxima! Bom pessoal, venho aqui falar da grande iniciativa do pessoal de alunos sexto periodo de Ciencia