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


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

查看所有标签

猜你喜欢:

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

The Filter Bubble

The Filter Bubble

Eli Pariser / Penguin Press / 2011-5-12 / GBP 16.45

In December 2009, Google began customizing its search results for each user. Instead of giving you the most broadly popular result, Google now tries to predict what you are most likely to click on. Ac......一起来看看 《The Filter Bubble》 这本书的介绍吧!

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

在线压缩/解压 HTML 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具