【发布时间】:2016-05-18 15:57:07
【问题描述】:
我想确保 static_assert 在单元测试中正常工作。也就是说,如果我有一个
class MyClass {static_assert(my_type_trait<T>::value, "error"); };
那么在单元测试中MyClass<TypeWithTrait> myClass; 应该“通过”,MyClass<TypeWithoutTrait> myClass; 应该“失败”。
有可能做这样的事情吗?
【问题讨论】:
-
是的,你试过了吗?
-
@101010 是的,我只是得到一个编译器错误。
-
@DavidDoria:所以?这正是静态断言的用途。如果符合预期则测试通过,否则则失败。
-
@Mat 但我无法构建项目以达到可以运行测试的程度。在这一点上,它不是“单元测试”,而是“我可以手动尝试并查看,但我无法在每次运行测试套件检查回归时自动执行此操作”。你明白我的意思吗?
-
这是我对典型单元测试库最大的抱怨之一。确保你失败与确保你通过同样重要。我相信 LLVM 的 lit (llvm.org/docs/CommandGuide/lit.html) 具有这种能力。尽管要完全透明,但我从未使用过它(将来可能会)。过去我写过这样的 bash-shell 脚本代码来解决这个问题:github.com/llvm-mirror/libcxx/blob/master/test/testit#L83-L95 这个解决方案一直不受欢迎,主要是因为它无法并行运行测试,并且无法检测到测试因错误原因而失败。
标签: c++ unit-testing c++11 googletest