gpt4 book ai didi

c++ - 编译器错误的单元测试

转载 作者:可可西里 更新时间:2023-11-01 18:39:21 25 4
gpt4 key购买 nike

您如何在单元测试中测试想要引发的编译器错误?

考虑代码:

class ErrorTest
{
OtherClass& read_write() {
return other;
}

const OtherClass& read_only() const {
return other;
}

private:
OtherClass other;
};

如何测试 read_only() 赋值?这非常重要,应该严格检查以正确生成编译器错误:

ErrorTest test;
OtherClass other = test.read_only();
test.read_write() = other.modify();
test.read_only() = other.modify(); /* This should error */

最佳答案

我想现在的主要问题是,您此时正在测试您的代码还是编译器?

测试编译器不一定是坏事...我过去遇到过编译器升级掩码错误,所以最好能确保您获得与预期相同的安全检查集。

但是,您将不得不做大量的跑腿工作。您的单元测试必须生成编译器,捕获它的输出,并在正确的行上解析它以获得正确的错误语句。这不是微不足道的,而且可以说是不值得的。

一种稍微简单的方法可能是保留一个错误代码目录,并让脚本一次编译每个文件。那里有一个“#ifdef MAKEFAIL”标志,它会打开应该失败的确切条件。确保编译器在您未设置该标志时返回 0,而在您设置该标志时返回非零。假设编译器在失败时返回非零值……我不知道 MSVC 是否遵循该规则。

我要提出的第三个选项是 autoconf,以解决可移植性问题。设置起来可能很痛苦,但其部分目的是确保您在编译之前拥有一个健全的开发环境。您可以在其中添加这样的测试,它可以处理查找编译器并进行尝试的问题。

关于c++ - 编译器错误的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1122372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com