C++ 单元测试C++;模板

C++ 单元测试C++;模板,c++,unit-testing,templates,C++,Unit Testing,Templates,我在实现我的库时使用了函数和类模板。 到目前为止,我刚刚在库单元测试(CPPFUnit)中实例化了一个模板, 然后像其他普通类或函数一样对其进行测试 最近我还计划在库API中添加一些模板。 好的界面当然是最重要的,不管是不是模板。 通过精心设计和实施的模板,即使不能完全防止, 至少让使用者更难射中自己的脚。 不管怎样,我觉得单元测试公共模板需要更严格一些, 与纯内部模板相比 你如何对你的C++模板进行单元测试? 你有没有想出什么好办法, 特别是对于公共库API中的模板?对于初学者,使用您认为最有

我在实现我的库时使用了函数和类模板。 到目前为止,我刚刚在库单元测试(CPPFUnit)中实例化了一个模板, 然后像其他普通类或函数一样对其进行测试

最近我还计划在库API中添加一些模板。 好的界面当然是最重要的,不管是不是模板。 通过精心设计和实施的模板,即使不能完全防止, 至少让使用者更难射中自己的脚。 不管怎样,我觉得单元测试公共模板需要更严格一些, 与纯内部模板相比

<>你如何对你的C++模板进行单元测试? 你有没有想出什么好办法,
特别是对于公共库API中的模板?

对于初学者,使用您认为最有可能由用户提供的参数对模板代码进行单元测试。我经常把东西做成“以防万一”的模板,结果除了我在编写原始代码时想到的那种类型之外,我什么都没用过。因此,在这种情况下,测试最可能的情况涵盖所有情况


如果您觉得需要进行更多测试,请使用与第一个参数尽可能不同的另一个模板参数。可能没有必要再次测试所有方法。有些方法实际上可能不依赖于模板参数。

在单元测试中实例化模板是测试模板类的关键

风险是什么?它们取决于库对模板参数的操作;根据用于实例化模板类和编写新测试的类,考虑可能出现的问题

至少您已经准备好了单元测试环境,可以重现将要报告的任何问题

我还有一个建议。除了对每个模板进行单元测试外,还应研究一些技术,这些技术将有助于约束库用户可能试图传递给模板的大量模板参数

例如:假设您只使用类型参数“string”和“char”测试模板。您没有证据表明其他类型参数对于这个特定模板会有问题,但出于某种原因,您“怀疑”其他未测试的类型参数会有问题

在上面的示例中,这并不一定意味着您应该彻底测试其他类型的arg。相反,您的情况可能暗示您应该使用一些编译时模板元编程技术,以确保您的模板永远不会与任何其他参数一起使用,而是与“string”和“char”一起使用

一个资源:

在本书的早期,作者展示了如下示例:

  • 如何制作一个模板,使其第一个类型arg的类型比第二个类型arg的类型小

  • 如何在编译时检测可转换性和继承性


“现代C++设计”(尽管它的标题相当宽泛,含糊)是一个相当先进的模板编程技术的探索。

BooST.Test.Test.Tobe有一个组件,它可以方便地测试模板相对于模板参数的集合。不这样做就像让所有函数参数类型为void一样*