如何编写单元测试来验证编译错误?

时间:2010-11-21 05:49:13

标签: unit-testing

我正在尝试编写测试来验证编译错误。它是关于为String类型属性分配一个数字。但由于它是编译错误,因此单元测试代码甚至不会在第一时间编译。所以任何人都有关于如何做到这一点的任何建议?

我想也许我可以在运行时分配号码并检查是否抛出了某些异常?但我不确定究竟是怎么做到的。

提前致谢!

2 个答案:

答案 0 :(得分:4)

如果我理解正确,你有一些代码可能无法编译,如果代码确实无法编译,你想编写单元测试失败。如果是这种情况,那么你不应该写任何单元测试。您应该明白,您应该只为您的代码编写单元测试,而不是其他人编写的代码。

你没有指定编程语言,所以我会做一些伪代码。假设您正在编写一个函数来添加两个数字:

function add(a, b) {
   return a + b;
}

很简单。您应该对此进行单元测试,例如通过进行如下测试:

function testAdd() {
   assertEquals(4, add(2, 2));
   assertEquals(46, add(12, 34));
}

但是,您应该编写测试,以测试+运算符是否正常工作。这是编写实现+运算符实际工作方式的库的人的工作。

因此,如果是这种情况,请不要编写任何单元测试。编译代码是编译器的工作。编译器应以适当的方式报告编译错误。您不应该测试编译器是否正确地完成了它的工作 - 测试那是编写编译器的人的工作。

答案 1 :(得分:1)

您没有指定语言

  • Ruby,Python - 动态&强大的类型系统。这意味着在运行时(动态)推导出类型,但禁止类型之间的隐式转换
  • Js,Perl - 动态&弱类型系统。
  • C ++ - 静态和强类型系统。

我们假设我们正在谈论C ++。而且我可以创造更多真实的例子。想象一下,为你的项目实现了static assert,它不能使用c ++ 11编译器

template <bool>
struct my_static_assert;

template <>
struct my_static_assert<true> {};

如果你想检查这种机制是否正常。您应该创建unittest函数,执行以下步骤:

  1. 为编译器创建一些文件

  2. 创建编译器的外部进程并将测试编译单元传递给它

  3. 等待编译器进程完成
  4. 从编译器进程中返回返回代码
  5. 您的功能检查4的返回代码。
  6. 我查看了谷歌测试指南,但似乎他们并不支持这样的概念https://github.com/google/googletest/blob/master/googletest/docs/advanced.md