使用Catch对BDD样式测试中的多个数据进行一项测试

问题描述:

我正在使用C++和Catch框架进行测试。当一组条件应该满足多个数据且没有代码重复时,使用Catch编写BDD风格的测试用例的正确方法是什么?使用Catch对BDD样式测试中的多个数据进行一项测试

作为一个例子,假设该测试中的场景:

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); 
      } 
     } 
    } 
} 

如可以看到的,THEN块是冗余的。无需再次编写相同的代码,做同样的事情的正确方法是什么?

我会提取一个方法,并在需要时调用它,而不是重复该功能。