Padrões para Desenvolvimento de Software Guiado por TestesEverton Rodrigues
Este documento fornece padrões e técnicas para desenvolvimento de software guiado por testes, incluindo escrever testes primeiro, usar dados de teste realistas, e isolar testes. Os padrões ajudam a responder perguntas como quanto testar e como escolher o que testar.
O documento descreve um curso sobre testes automatizados em Python. O curso aborda:
1) Testes unitários, de integração e funcionais com foco nos fundamentos de testes automatizados;
2) A prática do uso de testes automatizados no desenvolvimento guiado por testes (TDD);
3) As vantagens da abordagem TDD no curto e longo prazo e dos testes automatizados no longo prazo.
Desenvolvimento Dirigido por Testes com JunitAdolfo Neto
O objetivo desta palestra é apresentar como funciona o desenvolvimento dirigido por testes (TDD, do termo em inglês "test-driven development"), uma técnica de projeto de software utilizada principalmente em métodos ágeis para o desenvolvimento de software. Além disso, serão mostrados exemplos práticos de como desenvolver sofwtare utilizando TDD com o auxílio do framework open source JUnit (http://junit.sourceforge.net/).
O documento apresenta uma introdução ao framework JUnit para testes automatizados em Java. Ele discute por que usar JUnit, quando escrever testes, como escrever testes utilizando asserções, fixtures e testando exceções, e como rodar testes usando a interface gráfica ou linha de comando no Eclipse.
O documento apresenta os conceitos e objetivos do desenvolvimento orientado a testes (TDD). O TDD é uma metodologia que propõe escrever testes unitários antes de implementar o código, seguindo os passos vermelho-verde-refatoração. O documento explica os benefícios do TDD, como código de melhor qualidade e facilidade de refatoração.
O documento fornece uma introdução sobre testes de unidade com JUnit, descrevendo: 1) o que é JUnit e suas funcionalidades; 2) os passos para criar e executar testes de unidade com JUnit; 3) como usar asserções e métodos auxiliares como setUp() e tearDown().
Aqui são apresentados as técnicas do framework JUnit
/**Depois que entrei no mundo Java, começei a procurar por conteúdo na internet para estudar, então me deparei com um ótimo site, http://www.argonavis.com.br, de um grande cara chamado Helder Rocha, que disponibiliza este mesmo conteúdo em seu site também. Obrigado pela ajuda a comunidade.*/
Padrões para Desenvolvimento de Software Guiado por TestesEverton Rodrigues
Este documento fornece padrões e técnicas para desenvolvimento de software guiado por testes, incluindo escrever testes primeiro, usar dados de teste realistas, e isolar testes. Os padrões ajudam a responder perguntas como quanto testar e como escolher o que testar.
O documento descreve um curso sobre testes automatizados em Python. O curso aborda:
1) Testes unitários, de integração e funcionais com foco nos fundamentos de testes automatizados;
2) A prática do uso de testes automatizados no desenvolvimento guiado por testes (TDD);
3) As vantagens da abordagem TDD no curto e longo prazo e dos testes automatizados no longo prazo.
Desenvolvimento Dirigido por Testes com JunitAdolfo Neto
O objetivo desta palestra é apresentar como funciona o desenvolvimento dirigido por testes (TDD, do termo em inglês "test-driven development"), uma técnica de projeto de software utilizada principalmente em métodos ágeis para o desenvolvimento de software. Além disso, serão mostrados exemplos práticos de como desenvolver sofwtare utilizando TDD com o auxílio do framework open source JUnit (http://junit.sourceforge.net/).
O documento apresenta uma introdução ao framework JUnit para testes automatizados em Java. Ele discute por que usar JUnit, quando escrever testes, como escrever testes utilizando asserções, fixtures e testando exceções, e como rodar testes usando a interface gráfica ou linha de comando no Eclipse.
O documento apresenta os conceitos e objetivos do desenvolvimento orientado a testes (TDD). O TDD é uma metodologia que propõe escrever testes unitários antes de implementar o código, seguindo os passos vermelho-verde-refatoração. O documento explica os benefícios do TDD, como código de melhor qualidade e facilidade de refatoração.
O documento fornece uma introdução sobre testes de unidade com JUnit, descrevendo: 1) o que é JUnit e suas funcionalidades; 2) os passos para criar e executar testes de unidade com JUnit; 3) como usar asserções e métodos auxiliares como setUp() e tearDown().
Aqui são apresentados as técnicas do framework JUnit
/**Depois que entrei no mundo Java, começei a procurar por conteúdo na internet para estudar, então me deparei com um ótimo site, http://www.argonavis.com.br, de um grande cara chamado Helder Rocha, que disponibiliza este mesmo conteúdo em seu site também. Obrigado pela ajuda a comunidade.*/
O documento discute testes automatizados de software, incluindo: (1) os tipos de testes automatizados como unitários, de integração e funcionais; (2) a importância da automação para garantir qualidade e evitar regressões; (3) o método de desenvolvimento guiado por testes (Test-Driven Development).
Testando Aplicações Django: Quando, Como e Onde?Bernardo Fontes
Este documento fornece dicas sobre como testar aplicações Django de forma efetiva. Ele discute a importância de testes e como testar as principais partes de uma aplicação Django, incluindo views, forms e models. Além disso, fornece exemplos de código de teste e sugere ferramentas como o TestClient do Django e o model_mommy para ajudar a escrever bons testes automatizados.
O documento discute técnicas e estratégias para testes de software, enfatizando a importância de: 1) testar o código sistematicamente durante o desenvolvimento, 2) verificar limites e pré-condições, e 3) automatizar testes para validação contínua e prevenção de regressões.
1) O documento apresenta um treinamento sobre testes de unidade com JUnit.
2) É abordado o desenvolvimento de software tradicional versus ágil, com foco nos testes.
3) São apresentados conceitos e práticas de Test Driven Development (TDD) usando JUnit, como escrever testes antes do código e refatorar continuamente.
O documento discute testes de unidade avançados e desenvolvimento guiado por testes (TDD). O palestrante apresenta os benefícios de automatizar testes de unidade, como reduzir erros e permitir refatorações seguras. Ele também explica conceitos como stubs, mocks e test doubles, e demonstra exemplos práticos de testes de unidade com PHPUnit.
O documento apresenta boas práticas de desenvolvimento orientado a testes (TDD), incluindo separação de conceitos, anatomia de testes unitários, uso de bibliotecas como Mockito e Hamcrest para mockar dependências e fazer asserções, e a importância da escrita de nomes claros e descritivos para os testes.
O documento descreve uma palestra sobre testes unitários em Java usando JUnit. A palestra aborda conceitos de desenvolvimento guiado por testes, como escrever testes unitários, o framework JUnit e como implementar testes em JUnit usando Eclipse.
Atividades de Teste e Cobertura de Código em Javaaceiro
Erik Aceiro Antonio apresenta suas credenciais e experiência em testes de software e cobertura de código. Ele possui graduação em Ciência da Computação, mestrado em Engenharia Elétrica e está cursando doutorado em Ciência da Computação. Seu foco é no teste de software para sistemas embarcados críticos.
O documento discute técnicas de teste de software, como o desenvolvimento guiado por testes (TDD) e o uso de frameworks de mock como o Mockito. Ele explica como criar mocks e espiões para isolar unidades de teste e validar comportamentos. Também aborda ferramentas do Spring para testar controllers e simular requisições HTTP.
O documento discute testes unitários, apresentando: 1) O que são testes unitários e seus benefícios; 2) Como escrever testes unitários usando JUnit e frameworks de mock como Mockito e PowerMock.
Este documento apresenta as técnicas de teste unitário, introduzindo o framework TestNG e Mockito. Aborda como stubs e mocks ajudam a quebrar dependências e tornar o código mais testável através de refatoração.
O documento discute técnicas de refatoração de código. Ele apresenta o que é refatoração, sua relação com desenvolvimento baseado em testes e exemplos de quando e como refatorar código, incluindo remover duplicações, melhorar a legibilidade do código e identificar problemas. Além disso, explica várias técnicas de refatoração como extrair classe, extrair interface e extrair método.
O documento discute a programação defensiva, que envolve antecipar e prevenir erros no código através de técnicas como validação de dados de entrada, assertivas, tratamento de erros e exceções. Também aborda quando e onde aplicar tais técnicas de forma equilibrada para proteger partes críticas do sistema sem comprometer a performance.
O documento resume a trajetória profissional de Thiago Ghisi, desde sua formação inicial em 2003 até 2011, incluindo cursos, certificações e experiências de trabalho com foco em testes automatizados, programação ágil e qualidade de software.
O que você precisa saber sobre testes unitáriosFilipe M. Silva
O documento discute testes unitários em ambientes ágeis, abordando TDD, testes unitários, isolamento, spies, stubs e mocks. Apresenta boas práticas como organizar testes em descrições e iterações claras, e más práticas como testes integrados e dependência entre testes.
PHP & Segurança: Blindando Aplicações Web - Rafael Jaques - Tchelinux Bento G...Tchelinux
O documento discute estratégias de segurança para aplicações web PHP, abordando tópicos como: 1) planejamento de segurança, 2) melhorias no código, 3) filtragem de dados, 4) cuidados com uploads e formulários, 5) injeção de código, 6) cookies e sessões, 7) segurança no banco de dados, 8) HTTPS e 9) armazenamento seguro de senhas. O objetivo é fornecer uma introdução aos principais conceitos e boas práticas de segurança para desenvolvedores PHP.
Este documento discute a importância dos testes no desenvolvimento de software, abordando as fases dos testes e os tipos de testes utilizados em cada fase. Descreve testes estruturais e funcionais, assim como as quatro fases de testes: teste de unidade, integração, bottom-up e top-down.
Testes automatizados de software são essenciais para garantir a qualidade do software e evitar prejuízos. Testes manuais são difíceis, demorados e cobrem poucos casos, enquanto testes automatizados rodam rápido, cobrem muitos casos e ajudam na manutenção do código e documentação. É importante começar a automatizar testes desde o início do projeto, para garantir a testabilidade do código.
O documento discute a técnica de desenvolvimento de software Test Driven Development (TDD). Explica que TDD envolve pequenas iterações para desenvolver novas funcionalidades, começando com testes. Aponta que TDD leva a produzir software mais robusto e desacoplado, facilitando refatoração e reduzindo erros. Também descreve princípios como escrever testes isolados e começar definindo uma lista de casos de teste.
[1] O documento discute testes de unidade com o framework Junit, incluindo conceitos de testes de unidade, vantagens dos testes de unidade, como escrever testes com Junit e práticas recomendadas para testes de unidade. [2] Também aborda o uso de bibliotecas como EasyMock e DbUnit para isolar dependências e testar a camada de persistência e [3] discute o desenvolvimento guiado por testes (TDD).
O documento discute testes automatizados de software, incluindo: (1) os tipos de testes automatizados como unitários, de integração e funcionais; (2) a importância da automação para garantir qualidade e evitar regressões; (3) o método de desenvolvimento guiado por testes (Test-Driven Development).
Testando Aplicações Django: Quando, Como e Onde?Bernardo Fontes
Este documento fornece dicas sobre como testar aplicações Django de forma efetiva. Ele discute a importância de testes e como testar as principais partes de uma aplicação Django, incluindo views, forms e models. Além disso, fornece exemplos de código de teste e sugere ferramentas como o TestClient do Django e o model_mommy para ajudar a escrever bons testes automatizados.
O documento discute técnicas e estratégias para testes de software, enfatizando a importância de: 1) testar o código sistematicamente durante o desenvolvimento, 2) verificar limites e pré-condições, e 3) automatizar testes para validação contínua e prevenção de regressões.
1) O documento apresenta um treinamento sobre testes de unidade com JUnit.
2) É abordado o desenvolvimento de software tradicional versus ágil, com foco nos testes.
3) São apresentados conceitos e práticas de Test Driven Development (TDD) usando JUnit, como escrever testes antes do código e refatorar continuamente.
O documento discute testes de unidade avançados e desenvolvimento guiado por testes (TDD). O palestrante apresenta os benefícios de automatizar testes de unidade, como reduzir erros e permitir refatorações seguras. Ele também explica conceitos como stubs, mocks e test doubles, e demonstra exemplos práticos de testes de unidade com PHPUnit.
O documento apresenta boas práticas de desenvolvimento orientado a testes (TDD), incluindo separação de conceitos, anatomia de testes unitários, uso de bibliotecas como Mockito e Hamcrest para mockar dependências e fazer asserções, e a importância da escrita de nomes claros e descritivos para os testes.
O documento descreve uma palestra sobre testes unitários em Java usando JUnit. A palestra aborda conceitos de desenvolvimento guiado por testes, como escrever testes unitários, o framework JUnit e como implementar testes em JUnit usando Eclipse.
Atividades de Teste e Cobertura de Código em Javaaceiro
Erik Aceiro Antonio apresenta suas credenciais e experiência em testes de software e cobertura de código. Ele possui graduação em Ciência da Computação, mestrado em Engenharia Elétrica e está cursando doutorado em Ciência da Computação. Seu foco é no teste de software para sistemas embarcados críticos.
O documento discute técnicas de teste de software, como o desenvolvimento guiado por testes (TDD) e o uso de frameworks de mock como o Mockito. Ele explica como criar mocks e espiões para isolar unidades de teste e validar comportamentos. Também aborda ferramentas do Spring para testar controllers e simular requisições HTTP.
O documento discute testes unitários, apresentando: 1) O que são testes unitários e seus benefícios; 2) Como escrever testes unitários usando JUnit e frameworks de mock como Mockito e PowerMock.
Este documento apresenta as técnicas de teste unitário, introduzindo o framework TestNG e Mockito. Aborda como stubs e mocks ajudam a quebrar dependências e tornar o código mais testável através de refatoração.
O documento discute técnicas de refatoração de código. Ele apresenta o que é refatoração, sua relação com desenvolvimento baseado em testes e exemplos de quando e como refatorar código, incluindo remover duplicações, melhorar a legibilidade do código e identificar problemas. Além disso, explica várias técnicas de refatoração como extrair classe, extrair interface e extrair método.
O documento discute a programação defensiva, que envolve antecipar e prevenir erros no código através de técnicas como validação de dados de entrada, assertivas, tratamento de erros e exceções. Também aborda quando e onde aplicar tais técnicas de forma equilibrada para proteger partes críticas do sistema sem comprometer a performance.
O documento resume a trajetória profissional de Thiago Ghisi, desde sua formação inicial em 2003 até 2011, incluindo cursos, certificações e experiências de trabalho com foco em testes automatizados, programação ágil e qualidade de software.
O que você precisa saber sobre testes unitáriosFilipe M. Silva
O documento discute testes unitários em ambientes ágeis, abordando TDD, testes unitários, isolamento, spies, stubs e mocks. Apresenta boas práticas como organizar testes em descrições e iterações claras, e más práticas como testes integrados e dependência entre testes.
PHP & Segurança: Blindando Aplicações Web - Rafael Jaques - Tchelinux Bento G...Tchelinux
O documento discute estratégias de segurança para aplicações web PHP, abordando tópicos como: 1) planejamento de segurança, 2) melhorias no código, 3) filtragem de dados, 4) cuidados com uploads e formulários, 5) injeção de código, 6) cookies e sessões, 7) segurança no banco de dados, 8) HTTPS e 9) armazenamento seguro de senhas. O objetivo é fornecer uma introdução aos principais conceitos e boas práticas de segurança para desenvolvedores PHP.
Este documento discute a importância dos testes no desenvolvimento de software, abordando as fases dos testes e os tipos de testes utilizados em cada fase. Descreve testes estruturais e funcionais, assim como as quatro fases de testes: teste de unidade, integração, bottom-up e top-down.
Testes automatizados de software são essenciais para garantir a qualidade do software e evitar prejuízos. Testes manuais são difíceis, demorados e cobrem poucos casos, enquanto testes automatizados rodam rápido, cobrem muitos casos e ajudam na manutenção do código e documentação. É importante começar a automatizar testes desde o início do projeto, para garantir a testabilidade do código.
O documento discute a técnica de desenvolvimento de software Test Driven Development (TDD). Explica que TDD envolve pequenas iterações para desenvolver novas funcionalidades, começando com testes. Aponta que TDD leva a produzir software mais robusto e desacoplado, facilitando refatoração e reduzindo erros. Também descreve princípios como escrever testes isolados e começar definindo uma lista de casos de teste.
[1] O documento discute testes de unidade com o framework Junit, incluindo conceitos de testes de unidade, vantagens dos testes de unidade, como escrever testes com Junit e práticas recomendadas para testes de unidade. [2] Também aborda o uso de bibliotecas como EasyMock e DbUnit para isolar dependências e testar a camada de persistência e [3] discute o desenvolvimento guiado por testes (TDD).
Este documento discute Test-Driven Development (TDD), incluindo o que é TDD, seus benefícios, como funciona na prática e desafios de implementação. Também fornece um exemplo de como usar TDD para criar uma classe pilha.
Este documento apresenta um curso sobre testes automatizados, abordando testes unitários, de integração e funcionais. A unidade III discute testes de integração com ênfase em TestNG, Mockito, testes com banco de dados usando DBUnit e Seam.
Android DevConference - Indo além com automação de testes de apps AndroidiMasters
Eduardo Carrara, fala sobre Indo além com automação de testes de apps Android no Android DevConference 2016. Saiba mais em: http://androidconference.com.br/
O documento discute estratégias para automação de testes em aplicativos Android, incluindo como lidar com testes "flaky" e dependências externas através de mocks e isolamento. Ele também aborda diferentes camadas de testes e ferramentas como Espresso e UIAutomator para testes de interface do usuário.
O documento discute o que é teste de software, por que é necessário testar e os principais princípios e processos de teste de software. Explica que teste de software envolve executar um programa para descobrir erros, que testar é necessário para evitar prejuízos financeiros e de reputação causados por falhas, e que os humanos sempre cometem erros, justificando a necessidade de testes.
Este documento discute abordagens de teste de caixa branca ou teste baseado em código, com foco em técnicas como cobertura de código, fluxo de controle e fluxo de dados. Resume os principais objetivos, características e técnicas deste tipo de teste, incluindo TDD, BDD, ATDD e frameworks como JUnit e TestNG.
QArentena do dia 22/08/2020
Diante de todas as fases que temos que testar, uma que muitas vezes deixamos de lado é a de Unit Testing. Ela é tão importante quanto as outras que já tem a aplicação integrada. Mas o que diferencia muito com relação as outras fases é que ela tem um feedback muito rápido que ajuda muito durante a fase de desenvolvimento.
Nesta segunda parte da apresentação, Ismael explica como e quando utilizar cada Duble de Teste. No Final, faz comparações e conclui com dicas valiosas para serem usadas no dia-a-dia.
Este documento fornece uma introdução aos testes de unidade com a ferramenta JUnit em Java. Ele discute os objetivos e benefícios dos testes de unidade, apresenta os conceitos fundamentais do JUnit e fornece exemplos de como implementar testes com JUnit.
Este documento fornece uma introdução aos testes de unidade com a ferramenta JUnit em Java. Ele discute os objetivos e benefícios dos testes de unidade, apresenta os conceitos fundamentais do JUnit e fornece exemplos de como implementar testes com JUnit.
Este documento resume um seminário sobre desenvolvimento orientado a testes (TDD) usando a biblioteca JUnit em Java. Ele descreve os princípios do TDD, apresenta JUnit como um framework de teste popular e fornece um exemplo de como usar JUnit para testar uma árvore binária.
TDC2016POA | Trilha Android - Testes no Androidtdc-globalcode
O documento discute testes no Android, abordando conceitos como mocks, frameworks de teste, organização de testes e como testar dependências externas. Ele também fornece dicas sobre por onde começar a escrever testes e como garantir uma execução tranquila.
TDC2016POA | Trilha Android - Testes no Androidtdc-globalcode
O documento discute conceitos e práticas de testes no Android, incluindo: 1) razões para escrever testes como garantir funcionamento e documentar comportamento; 2) tipos de testes como unitários e de interface do usuário; 3) ferramentas para testes como JUnit, Espresso e Mockito.
O documento discute validação e testes de software, abordando tópicos como:
1) Os diferentes níveis de teste (unidade, integração, sistema e aceitação);
2) As abordagens de teste (caixa preta e caixa branca);
3) Os principais papéis no processo de teste (gerente de teste, líder de projeto de teste, etc);
4) A importância da documentação no planejamento e execução dos testes.
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Claudinei Brito Junior
Minicurso ministrado na XII SemanaTI na UNIVEM - Marília/SP, nos dias 23 e 24 de setembro de 2019. O título do minicurso é Técnicas de Teste e Automatização do Teste de Unidade e o minicurso tratava na teoria sobre algumas técnicas de Teste de Software, bem como a Técnica de Teste Estrutural, Teste Funcional e Teste Baseado em Defeitos, assim como aprendemos sobre a fase do Teste de Unidade, e ali, aplicamos na prática a Técnica de Teste Estrutural e tratamos sobre a teoria e a prática da automação de testes.
O documento discute a importância dos testes de unidade e apresenta a ferramenta JUnit para automatizar testes de unidade. Ele também fornece boas e más práticas para escrever testes de unidade e cobre tópicos como as anotações @Test, @Before, @After e @Rule do JUnit.
Testes, engenharia de Software, teste de SoftwareSilas Gonçalves
O documento discute testes de software, definindo-os como atividades que verificam se o software atende às suas especificações. Apresenta os principais tipos de testes como testes unitários, funcionais e de integração. Destaca a importância da documentação dos casos de teste e ferramentas como o JUnit e DBUnit para testes de unidade e o Rational Test Manager para gerenciamento de testes.
O documento discute a configuração e execução de testes automatizados usando as ferramentas Robotium e Sikuli. Ele fornece instruções sobre como configurar o ambiente de testes para ambas as ferramentas no Windows, e descreve os conceitos e estruturas de testes de caixa branca e preta usando Robotium.
3. O que é TDD?
● Test Driven Development.
● Metodologia de desenvolvimento baseado em testes.
● Os testes unitários são escritos antes da funcionalidade.
5. O que é Teste Unitario?
Um teste unitário(de uma unidade) é o teste da menor parte
testável de um programa.
A unidade pode ser uma instrução, método, classe,
funcionalidade e etc.
Depende muito do que é a menor parte que seu software
pode ser testado.
Cada teste deve ser responsável por testar apenas um
comportamento
6. O Teste unitário deve ser (F.I.R.S.T.)
● Fast ⇒ Rápido;
● Independent ⇒ Independente;
● Repeatable ⇒ Repetitivo;
● Self-Verifiable ⇒ Auto-Verificável;
● Timily ⇒ Escrito no momento certo;
7. O que é Teste de Integração?
É o teste utilizando os recursos reais sem assistência de
test doubles, ou seja ele garante que tudo funciona
conforme testado.
8. Se eu tenho testes unitários, por que eu preciso de
testes de Integração?
9. Como Funciona
As 3 Leis do TDD
O desenvolvimento deve ser orientado por essas 3 leis:
1. You are not allowed to write any production code unless it is to make a failing unit test pass.
2. You are not allowed to write any more of a unit test than is sufficient to fail; and compilation failures
are failures.
3. You are not allowed to write any more production code than is sufficient to pass the one failing unit
test.
Essas 3 leis em resumo fazem alusão ao uso de “Baby Steps”.
Robert C. Martin
aka Uncle Bob
10. Ciclo de Desenvolvimento de Testes Unitários
1 - RED - Erro nos teste;
2 - GREEN - Corrigir o erro no teste ou
corrigir o teste, da maneira mais fácil
possível ;
3 - REFACTOR - Limpar a casa, uma vez
que seu teste passou, agora você pode
pensar na melhor maneira de fazer;
11. Formato do Teste
Temos os 3 A’s :
● Arrange - É a preparação, seja de ambiente, variáveis, banco de dados, test
doubles e etc. Tudo aquilo que o teste irá utilizar.
● Act - Realizamos a chamada do SUT(System Under Test)
● Assert - É o momento de verificarmos se o teste trouxe os resultados
esperados.
12. Vantagens
● Evita future proofing(?)
● Garante consistência
● Evita desperdícios
● Refatoração em ambiente seguro
● Os testes são uma documentação
● Reduz esforços de retrabalho
14. Desvantagens
● Tempo de desenvolvimento*
● Testes devem ser mantidos
● Deve ser um esforço de time
● Difícil ser aplicado em código legados
● No início tem custo alto no desenvolvimento
● Refatorações, requerem também a refatoração dos testes
15. O que ele não garante?
● Código livre de bugs
● Qualidade
● Ausência de Erros
17. Dummy
● São Placeholders, geralmente eles são usados apenas para preencher listas
de parâmetros.
● Poderia ser substituido por Null
● São objetos que não interagem diretamente com o SUT
● O conteúdo não é relevante, mas o objeto é obrigatório
@Test
public void addCustomerTest() {
//método privado no teste pra criar um customer qualquer
//Customer customer = createDummyCustomer();
//Ou
Customer dummy = mock(Customer.class);
AddressBook addressBook = new AddressBook();
addressBook.addCustomer(customer);
assertEquals(1, addressBook.getNumberOfCustomers());
}
18. Stub
● Fornecem respostas pré configuradas às chamadas feitas durante o teste.
● Podemos usar para testar o caminho feliz e os casos com exceção
public class AcceptingAuthorizerStub implements Authorizer {
public Boolean authorize(String username, String password) {
return true;
}
}
EntityManager entityManager = mock(EntityManager.class);
when(entityManager.find(Customer.class,1L)).thenReturn(sampleCustomer);
19. Spy
● Spies são Stubs que registram informações de suas iterações.
● Podendo ou não ser a chamada do método real
@Test
public void whenStubASpy_thenStubbed() {
List<String> list = new ArrayList<String>();
List<String> spyList = Mockito.spy(list);
assertEquals(0, spyList.size());
Mockito.doReturn(100).when(spyList).size();
assertEquals(100, spyList.size());
}
@Test
public void whenSpyingOnList_thenCorrect() {
List<String> list = new ArrayList<String>();
List<String> spyList = Mockito.spy(list);
spyList.add("one");
spyList.add("two");
Mockito.verify(spyList).add("one");
Mockito.verify(spyList).add("two");
assertEquals(2, spyList.size());
}
20. Mock
● Mocks são objetos configurados, onde define-se o comportamento das
chamadas esperadas durante o teste.
● Podem lançar uma exceção se receberem uma chamada que não
configurada
● Permite verificação dos comportamentos configurados
UUIDProvider uuidProvider = mock(UUIDProvider.class)
when(uuidProvider.isValid(uuid)).thenReturn(true);
UUID id = UUID.fromString(uuid);
when(uuidProvider.fromString(str)).thenReturn(id);
verify(uuidProvider).isValid(str);
verify(uuidProvider).fromString(str);
21. Fake
● É uma implementação real, voltada para os testes e que não será usada em
produção
● Tem um comportamento voltado regras de negócio
● Podem ser extremamente complexos
● Normalmente representam um serviço externo, tal qual um banco de dado,
ou um sistema de autenticação.
public class AcceptingAuthorizerFake implements Authorizer {
public Boolean authorize(String username, String password) {
return username.equals("Bob");
}
}
23. Escolas de TDD
Classicist (Detroit)
● Bottom-up / Middle-out
● Teste da API pública
● Avanço através de pequenos incrementos
● Liberdade para refatorações agressivas na
implementação
● Chances de criar um YAGNI
● Testes Superficiais, foco no resultado
● Teste de Regressão em uma única suíte
● Testa estado
Mockist (London)
● Top-down
● Teste de todas as camadas
● Alto acoplamento entre testes e
implementação
● Reescrever ao invés de re-fatorar
● Design Limpo e minimalista
● Grande quantidade de test doubles
● Teste regressão depende de mais de uma
suíte
● Testa Comportamento
24. System Under Test(SUT)
public BoletoVO listById(String id) {
if(uuidProvider.isValid(id)) {
UUID uuid = uuidProvider.fromString(id);
Optional<Boleto> bo =
boletoRepository.findById(uuid);
if(bo.isPresent()) {
return boletoMapper.mapToVO(bo.get());
} else {
throw new BankslipRecordNotFoundException();
}
}
throw new InvalidUUIDFormatException();
}