Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 如何编写单元测试来验证编译错误?_Unit Testing - Fatal编程技术网

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

Unit testing 如何编写单元测试来验证编译错误?,unit-testing,Unit Testing,我正在尝试编写一个测试来验证编译错误。它是关于为字符串类型属性分配一个数字。但由于这是一个编译错误,单元测试代码甚至不会在一开始就被编译。有人对如何做到这一点有什么建议吗 我在想,也许我可以在运行时分配这个数字,然后检查是否抛出了某些异常?但我不知道该怎么做 提前谢谢 如果我理解正确,您可能有一些代码无法编译,您希望编写单元测试,如果代码确实无法编译,那么单元测试将失败。如果是这种情况,那么您不应该编写任何单元测试。您应该理解,您应该只为您的代码编写单元测试,而不是其他人编写的代码 您没有指定编

我正在尝试编写一个测试来验证编译错误。它是关于为字符串类型属性分配一个数字。但由于这是一个编译错误,单元测试代码甚至不会在一开始就被编译。有人对如何做到这一点有什么建议吗

我在想,也许我可以在运行时分配这个数字,然后检查是否抛出了某些异常?但我不知道该怎么做


提前谢谢

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

您没有指定编程语言,因此我将执行一些伪代码。假设您正在编写一个函数来添加两个数字:

function add(a, b) {
   return a + b;
}
很简单。您应该对此进行单元测试,例如,进行如下测试:

function testAdd() {
   assertEquals(4, add(2, 2));
   assertEquals(46, add(12, 34));
}
但是,您应该而不是编写一个测试来测试
+
操作符是否工作正常。这是编写实现
+
操作符真正工作原理的库的人的工作


因此,如果是这样,就不要编写任何单元测试。编译代码是编译器的工作。编译器应以适当的方式报告存在编译错误。您不应该测试编译器是否正确执行其工作-测试这是编写编译器的人员的工作。

您没有指定语言

  • Ruby、Python——动态和强大的类型系统。这意味着在运行时推导的类型(动态),但禁止在类型之间进行隐式转换
  • Js,Perl——动态和弱类型系统
  • C++--静态和强类型系统
我们假设我们在谈论C++。此外,我可以创造更多的真正的例子。假设您为不使用c++11编译器的项目实现

模板
构造我的静态断言;
模板
结构my_static_assert{};
如果您想检查这样的机制是否正常工作。您应该创建unittest函数,该函数执行以下步骤:

  • 为编译器创建一些文件

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

  • 等待编译器进程完成

  • 从编译器进程中检索返回代码

  • 您的函数检查从4返回的代码


  • 我查看了google测试指南,但他们似乎不支持这样的概念

    您可以生成一组您知道应该编译的代码和一组不应该编译的代码,并将其提供给编译器(通过命令行),然后在单元测试中检查结果。然而,我通常同意icyrock.com的回答。(1)“您不应该测试编译器是否正确地完成了它的工作”语言规范可以包含实现定义的细节,如果您利用这些细节,检查它会很酷(2)你可以在你的项目中引入一些编译时机制——可能你想检查一下)p.s.@icyrock.com,你有一个非常非常非常高的级别,15.5K),所以我真的认为你对它了如指掌)
    template <bool>
    struct my_static_assert;
    
    template <>
    struct my_static_assert<true> {};