使用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
块是冗余的。无需再次编写相同的代码,做同样的事情的正确方法是什么?
答
我会提取一个方法,并在需要时调用它,而不是重复该功能。