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


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

查看所有标签

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

数据驱动设计

数据驱动设计

[美]罗谢尔·肯(RochelleKing)、[美]伊丽莎白F.邱吉尔(Elizabeth F Churchill)、Caitlin Tan / 傅婕 / 机械工业出版社 / 2018-8 / 69.00元

本书旨在帮你了解数据引导设计的基本原则,了解数据与设计流程整合的价值,避免常见的陷阱与误区。本书重点关注定量实验与A/B测试,因为我们发现,数据分析与设计实践在此鲜有交集,但相对的潜在价值与机会缺大。本书提供了一些关于在组织中开展数据实践的观点。通过阅读这本书,你将转变你的团队的工作方式,从数据中获得大收益。后希望你可以在衡量指标的选择、佳展示方式与展示时机、测试以及设计意图增强方面,自信地表达自......一起来看看 《数据驱动设计》 这本书的介绍吧!

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

在线压缩/解压 HTML 代码

MD5 加密
MD5 加密

MD5 加密工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器