Articles : tests

Testing Java Spring Boot Microservices

Tests are an essential part of our codebase. At the very least, they minimize the risk of regression when we modify our code. There are several types of tests and each has a specific role: unit tests, integration tests, component tests, contract tests and end-to-end tests. It is crucial to understand the role of each type of test in order to leverage their potential.

The goal of this article is to describe a strategy to use them in order to test Java Spring Boot microservices. For every type of test, we will try to explain its role, its scope as well as tooling we like to use.

java, microservices, spring, tests

How to Write Robust Component Tests

Component tests allow to test complete use cases from end to end. They are often expensive especially in terms of setup and execution time. Thus, thought needs to be given to define their scope. Nevertheless, they are required in order to check and document the overall behaviour of the application or the microservice.

I have noticed that, in the context of microservices, these tests are very cost-effective. Indeed, they can be quite easy to set up because the already existing external API of the microservice can often be used directly without needing additional elements (like a fake server for instance). Moreover, the scope of a microservice is generally limited and can be tested exhaustively in isolation.

The goal of this article is to show how to make these tests robust. The main idea is to make them independent of the implementation.

java, microservices, tests

Controlling the Time in Java

Time is a tricky thing, it’s always changing. Having such moving parts into the codebase can be very annoying when testing, for instance. In this article, we will see how to control the time in Java.

java, tests

Ecrire des tests plus robustes au changement

Un des principaux freins à l'écriture de tests est quand ceux-ci doivent être mis à jour à chaque fois qu'une classe ou qu'une méthode est modifiée. Parfois, les tests à mettre à jour n'ont rien à voir avec la classe ou la méthode modifiée, mais comme ils s'en servent, ils s'en retrouvent affectés eux aussi. Ce problème survient quand le test est trop couplé à l'implémentation. Dans cet article, nous allons voir comment découpler les tests des classes qu'ils utilisent et ainsi les rendre plus robustes.

tdd, tests

Ecrire des tests avec Spring Boot 1.4

La version 1.4 de Spring Boot est sortie le 28 juillet 2016. Elle contient notamment des évolutions importantes au niveau de l'écriture des tests.
L'objectif de cet article est de voir comment migrer les tests d'un controller Spring MVC en utilisant les nouvelles fonctionnalités apportées par cette version.

spring, spring boot, spring mvc, tests

ATDD et TDD double boucle

L'Acceptance Test Driven Development est une pratique qui consiste à écrire un test d'acceptation dès la définition de la fonctionnalité à implémenter. Ce test permet ensuite de valider que l'implémentation de la fonctionnalité est terminée. En général, plusieurs composants unitaires sont nécessaires pour implémenter une fonctionnalité. Ces composants peuvent être développés en TDD dans une deuxième boucle de feedback.

L'objectif de cet article est de présenter l'ATDD et comment le mettre en pratique grâce à du TDD double boucle.

tdd, tests

Quand ne pas mocker

En tant que Test Driven Developer et plutôt adepte de l'école de TDD de Londres, j'ai tendance à utiliser un nombre assez important de mocks quand je teste mon code. Cependant, il y a des cas où je trouve plus utile de ne pas en utiliser.

L'objectif de cet article est de décrire ces cas ainsi que la façon de tester le code sans utiliser de mocks.

tests

Que faire lorsqu'une méthode privée veut être testée ?

Les tests automatisés servent à vérifier le bon comportement d'un objet (ou d'un ensemble d'objets), indépendamment de la manière dont ce comportement est implémenté. Le comportement d'un objet est décrit par son API publique (constructeurs, constantes et méthodes publiques). Les tests ne devraient donc utiliser que cette API.

Les méthodes privées (et protected) ne faisant pas partie de l'API publique d'un objet, elles ne devraient pas être appelées directement par le code de test.

Cet article a pour objectif de montrer comment réagir lorsqu'il paraît nécessaire de tester une méthode privée.

oop, tests

Testing Spring MVC Controllers

Since Spring 3.2 (January, 2013), it is possible to test Spring MVC controllers without an external framework. The goal of this article is to show how to test Spring MVC controllers using only Spring testing capabilities.

java, spring, spring mvc, tests