我是第一次在c++ code
上创建单元测试。我已经安装了gtest
和gmock
库,并且能够运行简化的测试脚本来测试非类功能,例如Google的git repository
中列出的基本初学者测试。
我现在着手尝试测试我的一段代码,但遇到了绊脚石。我有一个名为EEPROM_Util
的类,它带有两个成员函数,这些成员函数可以从EEPROM
定义的函数(arduino EEPROM
)中设置或获取整数值。
现在,如果我想为自己类中的每个成员函数创建一个单元测试,我相信我必须为stub
函数创建一个EEPROM
来告诉测试输出通过参数传递的内容及其被调用的次数。
由于我不太熟悉c++
,我对使用模拟库与此类进行交互感到有些困惑,我将如何以测试身份与这些函数进行交互?我只能看到创建模拟类的示例,但是由于不确定arduino
类的复杂性。
// tests.cpp
#include "eeprom_util.cpp"
#include <gtest/gtest.h>
#include <gmock/gmock.h>
TEST(Test, Initial)
{
int input [4] = { 1, 1, 1, 1 };
EEPROM_Util test_class;
test_class.setPreset(0, input);
}
int main(int argc, char **argv)
{
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
// eeprom_util.cpp
#include "eeprom_util.h"
#include "EEPROM.h"
void EEPROM_Util::setPreset(int preset, int presetValues[])
{
int presetEepromFirstIndex = preset * 4;
int presetEepromLastIndex = presetEepromFirstIndex + 4;
int presetUpdateIndex = 0;
for (int i = presetEepromFirstIndex; i < presetEepromLastIndex; i++)
{
EEPROM.update(i, static_cast <int>
(presetValues[presetUpdateIndex]));
presetUpdateIndex++;
}
}
void EEPROM_Util::getPreset(int preset, int *presetValues)
{
int presetEepromFirstIndex = preset * 4;
int presetEepromLastIndex = presetEepromFirstIndex + 4;
int cornerToUpdate = 0;
for (int i = presetEepromFirstIndex; i < presetEepromLastIndex; i++)
{
EEPROM.get(i, presetValues[cornerToUpdate]);
cornerToUpdate++;
}
}
// eeprom_util.h
#ifndef _EEPROM_UTIL_h
#define _EEPROM_UTIL_h
class EEPROM_Util
{
public:
static void setPreset(int preset, int presetValues[]);
static void getPreset(int preset, int *presetValues);
};
#endif