c++ - 如何对模板代码的故意编译错误进行单元测试

标签 c++ unit-testing templates

请注意,这不是 How write a unit test for verifying compiling error? 的拷贝因为我不关心测试外部库或编译器本身的正确性。

在 C++ 中,特别是在处理模板时,通常会采用防止某些特定代码段被编译的技术。由于这些可能会令人费解,那么确保特定代码段确实会产生编译器错误的最佳方法是什么?

由于测试甚至不应该被编译,你不能依赖诸如 之类的东西。 ,所以我猜它应该集成在构建系统中?这些问题通常是如何处理的?

最佳答案

以编写编译器测试的类似方式进行。您将使用某种脚本语言(shell、perl、tcl 等)进行一些测试代码,这些代码将在给定的代码片段上运行编译器,并检查是否编译了正确的代码,而正确的代码没有编译。

  • gcc 使用 DejaGnu ,它建立在 expect 之上,它本身是建立在 Tcl 之上的。
  • 如果您使用 shell 脚本(可能更简单,DejaGnu 可能是矫枉过正),您可能需要查看 shUnit2 .
  • Perl 的 Test::Harness 系统应该很容易按原样使用。
  • 毕竟,从 C++ 运行进程并没有那么多工作量,所以编写一个函数来尝试在给定字符串上调用编译器并检查它是否在您期望它不会那么难的行中输出错误并且比您可以将其集成到其他基于 boost.test 的测试中。

关于c++ - 如何对模板代码的故意编译错误进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7282350/

相关文章:

c++ - 字符串相等的编译时断言

c++ - 实现摇动事件?

c++ - 返回通过引用分配的引用局部变量

javascript - 如何使用 Ember.js 编写单元测试套件?

python - 如何创建带有内置 "test/main.py"main 函数的 python 包?

django - 无法从 Django 小部件的模板获取 MEDIA_URL

c# - John Resig 的微模板框架在 asp.net 网页上抛出错误

c++ - 成员函数声明的参数列表后的单个&符号是什么意思?

c++ - 在 C++ 中删除部分文件的最快方法

php - TypeError: class::functionName() 的返回值必须是/Interface 的实例,返回 null