Testing cxxtest套件能否在运行时动态扩展?

Testing cxxtest套件能否在运行时动态扩展?,testing,tdd,methodology,cxxtest,Testing,Tdd,Methodology,Cxxtest,我希望用额外的测试项动态地扩展我的测试场景,但是我发现所有的测试场景都必须在编译时可用(硬编码) 我的场景是,我有一个相当大的C++类,它有20种方法被测试。这个类需要测试40多个不同的数据集。这些数据集通过类构造函数获得,并通过参数进行控制 我的主要目标是避免为不同的数据集重新编写相同的20个测试用例。我想使用一个包含数据集列表的控制文件,为同一测试套件创建不同的装置 Q1)如何动态(在运行时)向测试套件添加更多测试 Q2)能否在运行时动态添加装置?是否有更好的测试套件来支持动态夹具 问题3)

我希望用额外的测试项动态地扩展我的测试场景,但是我发现所有的测试场景都必须在编译时可用(硬编码)

我的场景是,我有一个相当大的C++类,它有20种方法被测试。这个类需要测试40多个不同的数据集。这些数据集通过类构造函数获得,并通过参数进行控制

我的主要目标是避免为不同的数据集重新编写相同的20个测试用例。我想使用一个包含数据集列表的控制文件,为同一测试套件创建不同的装置

Q1)如何动态(在运行时)向测试套件添加更多测试

Q2)能否在运行时动态添加装置?是否有更好的测试套件来支持动态夹具

问题3)这是TDD技术避免的吗?任何人都对TDD技术有一个很好的总结

谢谢


--乔根森--

没有直接的方法。在运行
cxtestgen
时,测试的数量在编译之前确定。它解析文件并查找以
test
开头的方法名。它还查找
TestSuite
子体,并生成代码对每个子体实例化一次。您可以在每个测试套件上将参数传递给套件的构造函数,但仍然限于只返回一个对象

您可以修改构建设置以调用测试程序40次,每次在命令行上传递不同的参数。该计划的缺点是,由cxtest生成的默认
main
不接受命令行参数。您需要提供自己的实现来检查参数,然后调用正常的测试运行程序。大概是这样的:

std::string global_var; // check this in your test cases
int main(int argc, char* argv[]) { // add parameter list
  global_var = argv[1]; // read parameter list
  return CxxTest::ErrorPrinter().run(); // standard CxxTest
}
int main() {
  std::fstream dataset("datasetlist.txt");
  int result = 0;
  while (std::getline(dataset, global_var))
    result += CxxTest::ErrorPrinter().run();
  return result;
}
要使用该功能,请在运行
cxtestgen
时省略
--error printer
选项,在文件末尾添加
,然后使用

但是,只要您正在编写自己的
main
,您也可以尝试在那里解析数据集文件,然后多次调用测试运行程序。大概是这样的:

std::string global_var; // check this in your test cases
int main(int argc, char* argv[]) { // add parameter list
  global_var = argv[1]; // read parameter list
  return CxxTest::ErrorPrinter().run(); // standard CxxTest
}
int main() {
  std::fstream dataset("datasetlist.txt");
  int result = 0;
  while (std::getline(dataset, global_var))
    result += CxxTest::ErrorPrinter().run();
  return result;
}

没有任何直接的方法可以做到这一点。在运行
cxtestgen
时,测试的数量在编译之前确定。它解析文件并查找以
test
开头的方法名。它还查找
TestSuite
子体,并生成代码对每个子体实例化一次。您可以在每个测试套件上将参数传递给套件的构造函数,但仍然限于只返回一个对象

您可以修改构建设置以调用测试程序40次,每次在命令行上传递不同的参数。该计划的缺点是,由cxtest生成的默认
main
不接受命令行参数。您需要提供自己的实现来检查参数,然后调用正常的测试运行程序。大概是这样的:

std::string global_var; // check this in your test cases
int main(int argc, char* argv[]) { // add parameter list
  global_var = argv[1]; // read parameter list
  return CxxTest::ErrorPrinter().run(); // standard CxxTest
}
int main() {
  std::fstream dataset("datasetlist.txt");
  int result = 0;
  while (std::getline(dataset, global_var))
    result += CxxTest::ErrorPrinter().run();
  return result;
}
要使用该功能,请在运行
cxtestgen
时省略
--error printer
选项,在文件末尾添加
,然后使用

但是,只要您正在编写自己的
main
,您也可以尝试在那里解析数据集文件,然后多次调用测试运行程序。大概是这样的:

std::string global_var; // check this in your test cases
int main(int argc, char* argv[]) { // add parameter list
  global_var = argv[1]; // read parameter list
  return CxxTest::ErrorPrinter().run(); // standard CxxTest
}
int main() {
  std::fstream dataset("datasetlist.txt");
  int result = 0;
  while (std::getline(dataset, global_var))
    result += CxxTest::ErrorPrinter().run();
  return result;
}