使用C++对编译错误进行单元测试

Max*_*kov 8 c++ unit-testing compiler-errors

我编写了一个Matrix类,并检查它是否允许使用C++异常来增加不兼容大小的矩阵.我编写单元测试来检查该行为,并且他们期望抛出异常.

现在我将Matrix大小从运行时变量更改为模板参数.如果我能够正确地做到这一点,那么试图乘以错误大小的矩阵的代码甚至都不能编译.

现在似乎这些单元测试是多余的.但是,由于我不知道将来如何更改我的代码,以及会破坏什么,我仍然希望为此实现测试.如果在我预期我的测试在特定位置抛出特定异常之前,现在我希望我的测试在特定位置抛出特定的编译错误.

最好的方法是什么?我会想象某种基于Makefile和shell脚本的机制会等待特定的错误代码 - 或者我应该尝试别的东西?这个想法是一种常见做法还是完全疯狂?

编辑:当然,"单元测试"不是这种机制的合适名称,我知道,但就目前而言,我想不出更好的方法.已经有三位评论作者花了他们宝贵的时间和精力向我解释了什么是单元测试,哪些不是.不幸的是,虽然技术上是正确的,但这并没有帮助解决这里的实际问题.

编辑2:这是我要测试的BDD场景:

  • 给出两个大小为2x2和3x3的矩阵
  • 用户尝试将它们相乘时
  • 然后他得到一个错误

之前,该错误是运行时错误,并且测试它是微不足道的.但是现在我变成了编译时错误,我不知道如何能够自动测试这个场景并确认,在每次提交时(我在git hooks中都有单元测试)它仍然会给我一个错误.

Pau*_*ans 1

即使新的template代码风格使得在运行时“不可能”不匹配矩阵,保留“单元”测试也是无害的。您可能仍然存在一个运行时的错误,并且正如您所说,代码可能会再次更改。

如果您正在使用gccgcc请使用DejaGnu来测试自身。这应该足够强大来检测gcc编译错误。