c++ 单元测试编译时错误

栏目: C++ · 发布时间: 6年前

内容简介:http://stackoverflow.com/questions/605915/unit-test-compile-time-error

有没有办法测试编译时错误,但没有实际生成错误?例如,如果我创建一个不可复制的类,我想测试一下这个事实:尝试复制它会生成编译器错误,但是我仍然希望执行其他运行时测试.

struct Foo {
    int value_;
    Foo(int value) : value_(value) {}
  private:
    Foo(const Foo&);
    const Foo& operator=(const Foo&);
};

int main()
{
    Foo f(12);
    assert(f.value_ == 12);
    assert(IS_COMPILER_ERROR(Foo copy(f);));
} // Would like this to compile and run fine.

我想这不能像这样做,但是有一个惯用的方法来做到这一点,还是应该滚动自己的解决方案(也许使用脚本编译单独的测试文件和测试结果?)?

N.B .:我只是非拷贝来说明我的观点,所以我对使用boost :: noncopyable等的回答不感兴趣.

你可以使用make做.每个测试都将是一个代码段.以下是VC的2个测试工作示例. (我使用2个批处理文件进行通过测试和失败测试).我在这里使用GNU make.

Makefile文件:

FAILTEST = .\failtest.bat
PASSTEST = .\passtest.bat

tests: must_fail_but_passes \
    must_pass_but_fails

must_fail_but_passes:
    @$(FAILTEST) $@.cpp

must_pass_but_fails:
    @$(PASSTEST) $@.cpp

must_pass_but_fails.cpp

struct Foo { int value_; Foo(void) : value_(0) {} private: Foo(const Foo&); const Foo& operator=(const Foo&); }; 
int main()
{
    Foo f(12);
    return 0;
}

must_fail_but_passes.cpp

struct Foo { int value_; Foo(int value) : value_(value) {} private: Foo(const Foo&); const Foo& operator=(const Foo&); }; 
int main()
{
    Foo f(12);
    return 0;
}

passtest.bat

@echo off
cl /nologo %1 >NUL
if %errorlevel% == 0 goto pass
@echo %1 FAILED
:pass

failtest.bat

@echo off
cl /nologo %1 >NUL
if not %errorlevel% == 0 goto pass
@echo %1 FAILED
:pass

请注意,cl.exe(即Visual Studio编译器)需要在您的路径中才能“正常工作”

玩的开心!

附:我怀疑这样会让我着迷:-)

http://stackoverflow.com/questions/605915/unit-test-compile-time-error


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

HTML5从入门到精通

HTML5从入门到精通

明日科技 / 清华大学出版社 / 2012-9 / 59.80元

《HTML5从入门到精通》系统、全面地讲解了HTML语言及其最新版本HTML5的新功能与新特性,技术新颖实用。书中所有知识点均结合实例进行讲解,方便读者动手实践。同时在每章的最后还设置了习题,通过这些习题可以对本章学到的知识进行巩固。《HTML5从入门到精通》不仅能够使读者系统而全面地学习理论知识,还能满足读者充分实践的需求。一起来看看 《HTML5从入门到精通》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具