单元测试呼叫实例变量的函数
Unit test a call to function of instance variable
我有一些C 代码,类似于下面给出的示例。我想编写一个单元测试,以验证mflashlamp.trigger恰好称为五次。但是,到目前为止,我无法找到一个很好的方法来做到这一点。
我有以下约束:遵守Misra/googletest/googlemock
include <iostream>
class FlashLamp
{
public:
virtual void trigger(){
std::cout << "Trigger FlashLamp" << std::endl;
}
};
class Spectrometer
{
public:
FlashLamp mFlashLamp;
void foo(){
for( int i=0; i<5; i++ ){
mFlashLamp.trigger();
}
}
};
int main(){
Spectrometer S;
S.foo();
return 0;
}
任何人都有用于单位测试的良好和干净的解决方案。我能想到的一种解决方案是
class Spectrometer
{
public:
FlashLamp mFlashLamp;
FlashLamp* pFlashLamp;
}
还有一个向实例变量的指针,并使用它来访问触发器。但这意味着某些代码膨胀,因为它需要对每次取消指示进行零指针检查。任何人都有一个更好的解决方案的想法吗?
ps:我真的试图提出一个很好的标题,但不能。如果有人有任何改进,请随时进行编辑。
单元测试中的惯用方式是使用 interfaces 和模拟类::
#include <iostream>
// The interface definition
struct IFlashLamp {
virtual ~IFlashLamp() {}
virtual void trigger() = 0;
};
class FlashLamp : public IFlashLamp
{
public:
virtual void trigger() override {
std::cout << "Trigger FlashLamp" << std::endl;
}
};
class Spectrometer
{
public:
IFlashLamp& mFlashLamp;
Spectrometer(IFlashlamp& flashLamp) : mFlashLamp(flashLamp) {}
void foo(){
for( int i=0; i<5; i++ ){
mFlashLamp.trigger();
}
}
};
您将使用模拟类实现接口,该类别可以检查有关接口的通话的期望:
class FlashLampMock : public IFlashlamp {
int triggerCallCounter;
public:
FlashLampMock() : triggerCallCounter(0) {}
virtual void trigger() override {
++triggerCallCounter;
}
int getTriggerCallCounter() const { return triggerCallCounter; }
};
这是单位测试:
int main(){
FlashLampMock flashLampMock;
Spectrometer S(FlashLampMock);
S.foo();
assert(flashLampMock.getTriggerCallCounter() == 5);
return 0;
}
相关文章:
- 未使用的C++未优化的静态成员函数/变量
- 内联函数/变量的外部链接
- 同一函数中的静态函数变量初始化顺序
- 将非静态成员函数C 的使用无效,而将成员功能作为函数变量
- 如何从doxygen输出中排除类的无证件成员函数/变量
- 如何在LUA C API中分配全局LUA函数变量
- 如何将函数变量传递给C lambda函数
- 通过另一个C++函数更改函数变量
- c++11 lambda 真的支持闭包吗?函数变量中存在语义冲突
- C++:静态成员不能在声明时定义,但静态函数变量可以?
- apache-frift是否支持函数变量作为参数
- 类函数/变量在使用之前必须声明
- 函数变量去哪里
- 无法使用函数变量?错误表达式必须具有类类型
- 如何在main中使用函数变量
- 每当尝试打印函数变量时,C++ cout 错误
- 是否存在查看成员函数/变量的整洁等效项
- 访问友元类之间的函数变量
- 函数到函数变量
- 一个定义规则是否强制创建一个静态函数变量