2017-09-21 22 views
1

J'utilise le framework C++ et Catch pour les tests. Quelle est la bonne manière d'écrire un cas de test dans un style BDD en utilisant Catch lorsqu'un ensemble de critères doit être rempli sur plusieurs données sans duplication de code?Un test pour plusieurs données dans les tests de style BDD en utilisant Catch

À titre d'exemple, supposons que ce scénario de test:

SCENARIO("Test the graph deserialization") { 
    GIVEN("A graph") { 
     Graph g; 
     WHEN("It is loaded by file name") { 
      g.load("small_graph.gf"); 
      THEN("It has correct number of nodes and edges") { 
       REQUIRE(g.node_count() == 210); 
       REQUIRE(g.edge_count() == 306); 
      } 
     } 
     WHEN("It is loaded by input stream") { 
      std::ifstream ifs("small_graph.gf"); 
      g.load(ifs); 
      THEN("It has correct number of nodes and edges") { 
       REQUIRE(g.node_count() == 210); 
       REQUIRE(g.edge_count() == 306); 
      } 
     } 
    } 
} 

Comme on peut le voir, les THEN blocs sont redondants. Quelle est la bonne façon de faire la même chose sans écrire le même code à nouveau.

Répondre

1

Je voudrais extraire une méthode et l'appeler quand j'ai besoin au lieu de dupliquer la fonctionnalité.