| Propriété | Valeur |
|---|---|
| Catégorie | Reproductibilité (JustDummies.Reproducibility) |
| Sévérité | 🔴 Erreur |
| Activée par défaut | Oui |
Any.ReproduciblyAsync retourne un Task qui échoue avec l’exception du corps. Le jeter — en instruction isolée, ou via _ = — laisse un test défaillant passer au vert, parce que l’échec n’est jamais observé. Faites await sur le Task retourné.
Le CS4014 natif du compilateur ne l’attrape pas dans une méthode de test synchrone (void), précisément là où l’erreur est la plus facile à commettre.
Non conforme
[Fact]
public void A_20_percent_discount_takes_a_fifth_off_the_order() {
Any.ReproduciblyAsync(async () => { // JD002 : le Task retourné est jeté
string anyReference = Any.String().StartingWith("ORD-").WithLength(12).Generate();
string anyCustomer = Any.String().Alpha().WithLengthBetween(1, 50).Generate();
Order order = new Order(anyReference, anyCustomer, amount: 100m);
order.ApplyDiscount(20);
await _repository.SaveAsync(order);
Assert.Equal(80m, order.Total);
});
}
_ = Any.ReproduciblyAsync(async () => { /* ... */ }); // JD002 : le Task retourné est jeté
Conforme
[Fact]
public async Task A_20_percent_discount_takes_a_fifth_off_the_order() {
await Any.ReproduciblyAsync(async () => {
string anyReference = Any.String().StartingWith("ORD-").WithLength(12).Generate();
string anyCustomer = Any.String().Alpha().WithLengthBetween(1, 50).Generate();
Order order = new Order(anyReference, anyCustomer, amount: 100m);
order.ApplyDiscount(20);
await _repository.SaveAsync(order);
Assert.Equal(80m, order.Total);
});
}