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

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

内容简介: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


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

查看所有标签

猜你喜欢:

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

Python高效开发实战——Django、Tornado、Flask、Twisted(第2版)

Python高效开发实战——Django、Tornado、Flask、Twisted(第2版)

刘长龙 / 电子工业出版社 / 2019-1 / 99

也许你听说过全栈工程师,他们善于设计系统架构,精通数据库建模、通用网络协议、后端并发处理、前端界面设计,在学术研究或工程项目上能独当一面。通过对Python 3及相关Web框架的学习和实践,你就可以成为这样的全能型人才。 《Python高效开发实战——Django、Tornado、Flask、Twisted(第2版)》分为3篇:上篇是Python基础,带领初学者实践Python开发环境,掌握......一起来看看 《Python高效开发实战——Django、Tornado、Flask、Twisted(第2版)》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具