Eu tenho ouvido falar sobre o estilo de Londres versus o estilo de Chicago (às vezes chamado de estilo Detroit) do Test Driven Development (TDD).
Workshop do grupo de usuários de programação extrema de Utah:
O TDD no estilo de interação também é chamado de estilo mockista , ou estilo de Londres, depois do clube Extreme Tuesday de Londres, onde se tornou popular. Geralmente é contrastado com o TDD clássico ou no estilo Detroit, que é mais baseado no estado.
O workshop abrange a escola de TDD de Chicago (teste de comportamento e triangulação com base no estado) e a escola de Londres , que se concentra mais em testes de interação, zombaria e TDD de ponta a ponta, com ênfase especial no design orientado pela responsabilidade e no A abordagem Tell, Don't Ask do OO foi re-popularizada recentemente pelo excelente livro Guiding By Tests, de Growing Software Orientado a Objetos, de Steve Freeman e Nat Pryce .
O post TDD clássico ou "London School"? por Jason Gorman foi útil, mas seus exemplos me confundiram, porque ele usa dois exemplos diferentes em vez de um exemplo com as duas abordagens. Quais são as diferenças? Quando você usa cada estilo?
Calculator
regressarmultiply
, você verá dois testes falharem: o teste do razão e o teste da calculadora, mas apenas um teste falhará se você zombar da calculadora. Isso pode facilitar a identificação da origem do bug, principalmente se o sistema for complexo.O artigo Mocks Arn't Stubs , de Martin Fowler, é uma boa introdução ao tópico.
Dependendo do estilo de design escolhido (e dos princípios de design nos quais você cria seus programas), há pelo menos duas maneiras de ver um objeto:
No primeiro caso, você está interessado no que sai do processamento ou em qual estado o objeto é deixado após esse processamento. É aqui que métodos como
assertEquals()
entrar na imagem. Nesse caso, não importa muito quais outros objetos estavam envolvidos no processamento, quais métodos foram chamados etc. Esse tipo de verificação é chamado verificação baseada em estado e é o estilo "clássico".No segundo caso, como a maioria dos objetos nem retorna nenhum resultado (por exemplo,
void
métodos em Java), você está mais interessado em saber como os objetos se comunicam e se eles passam as mensagens corretas nas circunstâncias impostas pelo teste. Essas interações geralmente são verificadas com o auxílio de estruturas simuladas. Esse tipo de verificação é chamado de verificação baseada em comportamento ou em interação. Uma de suas implicações é a técnica chamada Behavior Driven Development, pela qual você desenvolve uma classe assumindo que seus colaboradores já existem (mesmo que ainda não existam), para que você possa codificar em suas interfaces.Observe que essa não é uma opção de escolha. Você pode ter um estilo de design que combine as duas abordagens para obter o melhor de cada uma.
fonte