mirror of
https://github.com/tiennm99/java-design-patterns.git
synced 2026-05-16 16:59:24 +00:00
87a774c9d6
* translate Abstract Document documentation in french * translate Abstract Document documentation in french for issue #2278 * french translation of abstract factory * French translation for active-object * translate Abstract Document documentation in french * translate Abstract Document documentation in french for issue #2278 * french translation of abstract factory * French translation for active-object * tranlate to french: acyclic-visitore, adapter, aggregator-microservice, ambassador, api-gateway, arrange-act-assert, async-method-invocation, balking, bridge.
141 lines
4.0 KiB
Markdown
141 lines
4.0 KiB
Markdown
---
|
||
title: Arrange/Act/Assert
|
||
category: Idiom
|
||
language: fr
|
||
tag:
|
||
- Testing
|
||
---
|
||
|
||
## Aussi connu sous le nom de
|
||
|
||
Given/When/Then
|
||
|
||
## Intention
|
||
|
||
Arrange/Act/Assert (AAA) est un pattron d'organisation des tests unitaires.
|
||
Il décompose les tests en trois étapes claires et distinctes :
|
||
|
||
1. Arrange : éffectuer la configuration et l'initialisation requises pour le test.
|
||
2. Act : éffectuer la ou les actions requises pour le test.
|
||
3. Assert: Vérifier le(s) résultat(s) du test.
|
||
|
||
## Explication
|
||
|
||
Ce pattron présente plusieurs avantages importants. Il crée une séparation claire entre la mise en place d'un test d'un test,
|
||
les opérations et les résultats. Cette structure rend le code plus facile à lire et à comprendre.
|
||
Si vous placez les étapes dans l'ordre et que vous formatez votre code source pour les séparer, vous pouvez parcourir un test et comprendre rapidement ce qu'il fait.
|
||
|
||
Il impose également un certain degré de discipline lors de l'écriture des tests. Vous devez penser clairement les trois étapes de votre test.
|
||
Il est plus naturel d'écrire les tests en même temps, puisque vous avez déjà un plan.
|
||
|
||
Exemple
|
||
|
||
> Pour écrire des tests unitaire clairs et compréhensibles.
|
||
|
||
En clair
|
||
|
||
> Arrange/Act/Assert est un pattron de conception de tests qui organise les tests en trois étapes pour une maintenance facile.
|
||
|
||
WikiWikiWeb dit
|
||
|
||
> Arrange/Act/Assert est un pattron pour organiser et formater un code dans les methodes de test unitaire.
|
||
|
||
**Exemple de programme**
|
||
|
||
Commençons par présenter notre classe `Cash` qui subira un test unitaire.
|
||
|
||
```java
|
||
public class Cash {
|
||
|
||
private int amount;
|
||
|
||
Cash(int amount) {
|
||
this.amount = amount;
|
||
}
|
||
|
||
void plus(int addend) {
|
||
amount += addend;
|
||
}
|
||
|
||
boolean minus(int subtrahend) {
|
||
if (amount >= subtrahend) {
|
||
amount -= subtrahend;
|
||
return true;
|
||
} else {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
int count() {
|
||
return amount;
|
||
}
|
||
}
|
||
```
|
||
|
||
Ensuite, nous rédigeons nos tests unitaires suivant le pattron Arrange/Act/Assert.
|
||
Notez les étapes clairement séparées pour chaque test unitaire.
|
||
|
||
```java
|
||
class CashAAATest {
|
||
|
||
@Test
|
||
void testPlus() {
|
||
//Arrange
|
||
var cash = new Cash(3);
|
||
//Act
|
||
cash.plus(4);
|
||
//Assert
|
||
assertEquals(7, cash.count());
|
||
}
|
||
|
||
@Test
|
||
void testMinus() {
|
||
//Arrange
|
||
var cash = new Cash(8);
|
||
//Act
|
||
var result = cash.minus(5);
|
||
//Assert
|
||
assertTrue(result);
|
||
assertEquals(3, cash.count());
|
||
}
|
||
|
||
@Test
|
||
void testInsufficientMinus() {
|
||
//Arrange
|
||
var cash = new Cash(1);
|
||
//Act
|
||
var result = cash.minus(6);
|
||
//Assert
|
||
assertFalse(result);
|
||
assertEquals(1, cash.count());
|
||
}
|
||
|
||
@Test
|
||
void testUpdate() {
|
||
//Arrange
|
||
var cash = new Cash(5);
|
||
//Act
|
||
cash.plus(6);
|
||
var result = cash.minus(3);
|
||
//Assert
|
||
assertTrue(result);
|
||
assertEquals(8, cash.count());
|
||
}
|
||
}
|
||
```
|
||
|
||
## Application
|
||
|
||
Le pattron Arrange/Act/Assert peut être utilisé lorsque :
|
||
|
||
* Vous avez besoin d'organiser vos tests unitaire pour qu'il soit facile à lire, maintenir et améliorer.
|
||
|
||
## Crédits
|
||
|
||
* [Arrange, Act, Assert: What is AAA Testing?](https://blog.ncrunch.net/post/arrange-act-assert-aaa-testing.aspx)
|
||
* [Bill Wake: 3A – Arrange, Act, Assert](https://xp123.com/articles/3a-arrange-act-assert/)
|
||
* [Martin Fowler: GivenWhenThen](https://martinfowler.com/bliki/GivenWhenThen.html)
|
||
* [xUnit Test Patterns: Refactoring Test Code](https://www.amazon.com/gp/product/0131495054/ref=as_li_qf_asin_il_tl?ie=UTF8&tag=javadesignpat-20&creative=9325&linkCode=as2&creativeASIN=0131495054&linkId=99701e8f4af2f7e8dd50d720c9b63dbf)
|
||
* [Unit Testing Principles, Practices, and Patterns](https://www.amazon.com/gp/product/1617296279/ref=as_li_qf_asin_il_tl?ie=UTF8&tag=javadesignpat-20&creative=9325&linkCode=as2&creativeASIN=1617296279&linkId=74c75cf22a63c3e4758ae08aa0a0cc35)
|
||
* [Test Driven Development: By Example](https://www.amazon.com/gp/product/0321146530/ref=as_li_qf_asin_il_tl?ie=UTF8&tag=javadesignpat-20&creative=9325&linkCode=as2&creativeASIN=0321146530&linkId=5c63a93d8c1175b84ca5087472ef0e05)
|