CUTE单元测试无法识别引发的异常
CUTE unit test not recognizing thrown exception
使用CUTE单元测试框架,我有以下类:
const std::size_t COARSE_MODEL_COUNT = 4;
class ModelType
{
public:
explicit ModelType(std::size_t aModelNumber) : theModelNumber(aModelNumber){}
virtual operator size_t(){ return theModelNumber; }
protected:
std::size_t theModelNumber;
};
class CoarseModelType : public ModelType
{
public:
explicit CoarseModelType(std::size_t aModelNumber) : ModelType(aModelNumber)
{
if (COARSE_MODEL_COUNT <= aModelNumber)
{
throw std::invalid_argument("Invalid model number selected for
this model type.");
}
}
};
使用以下单元测试:
void ModelTypeTest::testCoarseModelConstructor()
{
//greater than test
ASSERT_THROWS(CoarseModelType(COARSE_MODEL_COUNT+1), std::invalid_argument);
//equal to
ASSERT_THROWS(CoarseModelType(COARSE_MODEL_COUNT), std::invalid_argument);
}
如果我注释掉第二个ASSERT_THROWS
,则单元测试正确通过。如果我把它留在里面,它就会失败。我认为在std::size_t
类型上使用<=
运算符可以识别==
组件,但事实并非如此。ASSERT_THROWS
是一个宏。
我们在Linux上使用gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46)
。是否存在某种隐含的转换或我不知道的事情?我们都在为这件事挠头。
编辑:
以下内容确实在单元测试中抛出了一个错误,并被注册为错误而不是失败。在第二个ASSERT_THROWS
语句有机会失败之前抛出异常:
void ModelTypeTest::testCoarseModelConstructor()
{
//greater than test
ASSERT_THROWS(CoarseModelType(COARSE_MODEL_COUNT+1), std::invalid_argument);
if(COARSE_MODEL_COUNT <= COARSE_MODEL_COUNT){
throw std::invalid_argument("wtf");
}
//equal to
ASSERT_THROWS(CoarseModelType(COARSE_MODEL_COUNT), std::invalid_argument);
}
所以这是CUTE的一个问题。我只是不知道如何或为什么与构造函数代码进行宏交互。
(Ahem)我认为ASSERT_THROWS
宏正在做一些你没有意识到的事情。代替
CoarseModelType(COARSE_MODEL_COUNT)
尝试
CoarseModelType dummy(COARSE_MODEL_COUNT)
看看会发生什么。第一种是调用构造函数的一种奇怪方式,一个笨拙的宏可能会将它变成编译器解释不同的东西。
(注意:您可以使用gcc -E
来预处理源代码,而无需编译它,在适当的位置扩展宏,这样您就可以看到它们在做什么。)
相关文章:
- 处理多个异常集合的C++方法
- 我在c++代码中生成了一个运行时#3异常
- 孤立代码块在结构中引发异常
- 提升 ASIO 无法识别计时器对象
- C++中的赋值发生,尽管右侧出现异常
- 从udp接收帧对于人脸识别来说太慢
- 模板类无法识别友元运算符
- 从构造函数抛出异常时如何克服内存泄漏
- 异常属于C++中的线程还是进程
- 当类定义不可见时捕获异常
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- 为什么异常不退出程序?
- std::visit无法识别类型
- 为什么我应该在异常处理中使用std::cerr而不是std::cout
- 如何修复链表类实现的未处理异常0xDDDDDDDD
- catch语句如何在没有反射的情况下识别异常类型
- 识别终止中抛出的c++异常
- 如何识别抛出的特定异常
- c++中无法捕获异常:无法识别异常类型
- CUTE单元测试无法识别引发的异常