【发布时间】:2011-08-09 02:06:18
【问题描述】:
如何将以下代码转换为使用 boost 单元测试框架:
#include <iostream>
#include <fstream>
#include "graph.hh"
int main(int argc, char **argv) {
const char* ifile = argv[1];
Graph gp;
gp.read_xml(ifile);
std::cout << "Checking number of nodes and edges..." << std::endl;
int nodes_expected = 16;
if(nodes_expected != gp.nodes()) {
std::cout << "Test Failed." << std::endl;
std::cout << "Expected: " << nodes_expected << std::endl;
std::cout << "Result: " << gp.nodes() << std::endl;
}
int edges_expected = 15;
if(edges_expected != gp.edges()) {
std::cout << "Test Failed." << std::endl;
std::cout << "Expected: " << edges_expected << std::endl;
std::cout << "Result: " << gp.edges() << std::endl;
}
return 0;
}
我已阅读 (Boost Test) 上的文档,但它没有告诉我如何从命令行获取参数。否则,我可能会使用 BOOST_CHECK_EQUAL。
【问题讨论】:
-
你的测试不是针对一些特殊的
ifile吗?如果是,则以后几乎不需要更改它,您只需硬编码路径即可。 -
测试应该是完全独立的,如果您需要为其提供参数,情况就不再如此。如果您需要使用不同的文件进行测试,请编写一个方法 doTest(string filename) 并创建几个测试用例,这些用例使用不同的硬编码参数调用此方法。这样,您的代码库或持续集成工具的每个其他用户都将能够运行所有测试,而无需了解如何执行此操作。对我来说,其他所有事情听起来都不像是单元测试。
-
所有
ifiles都包含一般功能。我正在尝试创建一个测试套件来测试这些功能。其他测试套件更具体,我为这些套件设置了硬编码值。
标签: c++ unit-testing boost