Posts

Showing posts with the label mocks

Testing Mocks

Image
One common mistake engineers make is to test mocks. However, would you know what the right principles are and how to spot good or bad tests according to these principles?  IF you don't have first principles, you are very likely shooting into the dark.  In Brazil, we have this metaphor that if you play chess with a pigeon (I will use a chicken in this post), you will very likely lose because the pigeon does not know what it is doing and probably will be upset with you for whatever you say. People say if you truly know, you know how to explain. Well, I will go further and say IF you truly know you extract first principles and explain with those principles, so your explanation is short, concise, and direct. Otherwise, you are a chicken on a chessboard just doing random things you don't fully understand.

Embedded Mocks and Hidden Contracts

Image
Testing is essential . Testing requires diversity, from integration to chaos , from your local machine to production . Writing tests not always is fun because sometimes is hard to write tests because not all contracts are good, and clean and went through a lot of thought processes. Is easy to blame the design, architecture, and even the implementation, but are we sure we are not missing anything? Something that is hard to test very likely will not be tested. Testability is a good property of any design or architecture sure. Making good solutions that are easy to test is a good thing. However, mocking is often taken for granted, meaning is seen as something that is just good and has no drawbacks, but that is not true. Everything has drawbacks. Integration tests are often seen as bad practices and people tend to lean toward unit tests instead. Just keep in mind Integration tests don't require mocks. Unit tests often require mocks to keep them isolated and cut off external dependencie...

Scala TestContainers

Image
TestContainers is a great project for integration tests, mocking, and even for Chaos Engineering. Scala TestContainers is the library in the form of idiomatic-scala with some sugar to make it even easier to use it. I want to show you guys how we can use Scala Test Containers in an SBT 1.5.0 Project using Scala Spec in order to test as MySQL docker container. So let's get started!

Spring Boot 2.x and Mocks

Image
Spring Boot has interesting extensions for mocks using Mockito. Sometimes mocks can be very harried. Unit Tests make sense for services however the cost of mocks sometimes is too high and it could be a very time-consuming and complicated task. Spring-Boot has interesting support together with mockito to make mocks easier and more declarative. Mock is not a free lunch dont get me wrong. However, when you are coding a service Dependency Injection makes sense. Since Dependency Injection makes sense for services why such a thing would not make sense for mocks? Well, it's the same principle. If your implementation relies on dependency injection, your tests should also do the same. I have a bit of different opinion about shared libraries where I dont think they should be coupled with Spring and therefore might not have DI at All. Libraries and Services are completely different animals. Going back to services, today I want to share a video and some sample code I made to show how mocking c...

Testes Unitários na prática com Spring, TestNG, Mockito e Maven 2 : Parte 3

Na parte 1 desta séria de postes comentei sobre a integração de soluções para testes como o TestNG e o Mockito mostrando um domínio básico de um aplicação para efetuarmos testes. Na parte 2 mostrei na prática como criar um teste com Spring, testNG e rodar tudo através do Maven 2. Neste post vou falar mais de alguns recursos do TestNG e mostrar como utilizar o Mockito e bem como as possibilidades e cenários de uso deste tipo de soluções para testes. Continuando o assunto com testNG vou falar de alguns recursos da solução utilizando anotações. Anotações de @Before... e @After... O TestNG tem algumas anotações muito úteis. Para setup de testes e grupos de testes, isso nos possibilita montar o ambiente necessário para execução dos testes. Também possibilita a limpeza do cenário dos testes entre uma execução e outra. Confira as anotações: @BeforeClass @AfterClass @BeforeMethod @AfterMethod As anotações de Before e After significam que o método anotado vai rodar antes ou depo...

Testes Unitários na prática com Spring, TestNG, Mockito e Maven 2 : Parte 2

No post anterior eu comecei a falar de testes com Spring, TestNG, Mockito e Maven. Neste post vou continuar com o assunto. Agora direto ao código e com exemplo práticos, usarei isto para discutir mais sobre o tema. Vamos ao código então, vou mostrar primeiro o código do domínio e depois os serviços para por fim chegar no nosso objetivo os testes. Produto package com.blogspost.diegopacheco.testng.spring.mockito.maven.core.domain; import java.io.Serializable; /** * Pojo que representa a entidade Produto. * O produto pode ser qualquer mercadoria que eh vendida pelo estabelecimento. * Você pode adicionar mapeamento ORM aqui com anotações por exemplo, isso foi * abstraido por conta do foco do post. * * @author Diego Pacheco * @version 1.0 * @since 28/07/2009 * */ public class Produto implements Serializable { private static final long serialVersionUID = 1L; private Long id; private String nome; private String desc; public Produto(){ } public Produto(Long id, String nome, Strin...

Testes Unitários na prática com Spring, TestNG, Mockito e Maven 2 : Parte 1

Image
Neste post vou mostrar como podemos criar testes unitários para aplicações desenvolvidas com Spring usando o TestNG . Além disto usarei o framework para mocks chamado Mockito com isto será possível simular o comportamento de certos objetos para realizar o testes. No final vamos rodar estes testes com o Maven. Se quiser saber mais sobre testes, Q.A e Maven sugiro que leia meus postas anteriores: Testes do Desenvolvedor: Indo além do Debug Q.A Muito mais que Testes Integração Continua: O Verdadeiro Foco G.C ou Q.A? 10 Motivos para Você Usar Maven Maven 2.0.8 + Archiva 1.0.1 + Tomcat 6.0.16 Mais Poder ao Maven com Archiva Testes unitários com o TestNG O testNG é um framework para testes unitários feito em Java para Java :). A solução é bem mais flexível do que o JUnit que é a solução mais tradicional de testes unitários em Java. O testNG prove mais facilidades do que o JUnit principalmente quando realizamos testes em grupos, esta funcionalidade eh útil para testar grupos de funcionalidad...

Testes do Desenvolvedor: Indo além do Debug

Image
Testes... Esta é uma questão delicada. No fundo todos pensam que sabem a importância dos testes, na prática poucos sabem como testar, quando testar e a real importância dos testes. Neste post vou falar hábitos e conceitos de testes e bem como alguns níveis básicos de testes que um bom desenvolvedor deveria fazer. Muitos profissionais ainda pensam que testes são tarefa dos testadores e quem sabe, dependendo da empresa tem um cara de SQA envolvido na questão. Testes muitas vezes não são realizados por desenvolvedores e arquitetos, mas em muitos casos deveriam. Nem sempre é fácil testar, muitas vezes a complexidade de se criar e realizar testes é uma barreira para a utilização desta disciplina tão importante da engenharia. Existem algumas barreiras para o uso de testes ou o uso adequando desta prática no decorrer do post pretendo abordar este assunto também. Não estou aqui para falar do testes funcional, que as vezes é conhecido como teste de tela, existe muita técnica e práticas para rea...