使用GMOCK的困惑

时间:2018-09-06 07:13:41

标签: c++ unit-testing googletest gmock

我是第一次在c++ code上创建单元测试。我已经安装了gtestgmock库,并且能够运行简化的测试脚本来测试非类功能,例如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

0 个答案:

没有答案