Question

Dans mon projet actuel, j'ai du mal à trouver une bonne solution pour créer des tests d'intégration évolutifs qui n'ont aucun effet secondaire. Un peu de clarification sur l'effet secondaire Propriété gratuite: il s'agit principalement de la base de données; Il ne devrait pas y avoir de modifications dans la base de données une fois les tests terminés (l'état doit être conservé). Peut-être que l'évolutivité et la préservation des États ne se réunissent pas, mais je veux vraiment faire pression pour une meilleure solution.

Voici un test d'intégration typique (ces tests touchent la couche de base de données):

public class OrderTests {

    List<Order> ordersToDelete = new ArrayList<Order>(); 

    public testOrderCreation() {
        Order order = new Order();
        assertTrue(order.save());
        orderToDelete.add(order);
    }

    public testOrderComparison() {
        Order order = new Order();
        Order order2 = new Order();
        assertFalse(order.isEqual(order2);
        orderToDelete.add(order);
        orderToDelete.add(order2);
    }
    // More tests

    public teardown() {
         for(Order order : ordersToDelete)
             order.delete();
    }
}

Comme on pourrait l'imaginer, cette approche donne des tests extrêmement lents. Et, lorsqu'il est appliqué à l'ensemble des tests d'intégration, il faut environ 5 secondes pour tester seulement une petite partie du système. Je peux imaginer que ce nombre augmente lorsque la couverture est augmentée.

Quelle serait une autre approche pour rédiger de tels tests? Une alternative à laquelle je peux penser est d'avoir une sorte de variables globales (dans une classe) et toutes les méthodes de test partagent cette variable. En conséquence, seules quelques commandes sont créées et supprimées; entraînant des tests plus rapides. Cependant, je pense que cela introduit un problème plus important; Les tests ne sont plus isolés et il devient de plus en plus difficile de les comprendre et de les analyser.

Il se peut que des tests d'intégration ne soient pas destinés à être exécutés aussi souvent que les tests unitaires; Par conséquent, de faibles performances pourraient être acceptables pour celles-ci. Dans tous les cas, ce serait formidable de savoir si quelqu'un a proposé des alternatives pour améliorer l'évolutivité.

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
scroll top