Gmock обнаружил ошибку при фактическом счетчике вызовов функции не соответствует expect_call

Я новичок в использовании Google Mock и обнаружил ошибку: «Ошибка: фактическое количество вызовов функции не соответствует EXPECT_CALL (…)».

Я не уверен, что делаю неправильно. Я последовал этому решению, предложенному здесь, и я все еще сталкиваюсь с этой ошибкой.

Вот пример кода, над которым я работаю:

Класс Orig

//orig.h
#include <stdio.h>

class Orig {
public:
    virtual ~Orig(){}
    virtual int this_func(uint8_t x, uint8_t* y, uint8_t z) = 0;
    virtual int that_func(uint8_t x, uint8_t* y, uint8_t z) = 0;
    virtual void those_func(int abc) = 0;
}; 

Класс Mock Orig

//mock_orig.h
#include "gtest/gtest.h"
#include "gmock/gmock.h"
#include "calling_class.h"

class MockOrig : public Orig {
public:
    MOCK_METHOD3(this_func, int(uint8_t x, uint8_t* y, uint8_t z));
    MOCK_METHOD3(that_func, int(uint8_t x, uint8_t* y, uint8_t z));
    MOCK_METHOD1(those_func, void(int abc));
};

Вызов класса

//calling_class.h
#define MY_CONST1       0x01
#define MY_CONST2       0x02
#define X_CONST1        0x03
#define X_CONST2        0x04
#define SAMPLE_VALUE    (20)
#define TOTAL_VALUE     (100/SAMPLE_VALUE)

#include "orig.h"

class CallingClass {
public:
    explicit CallingClass(Orig * o) : mOrig(o){};
    void calling_func(void) {
        static int oldValue = 0;
        static uint16_t counter = 0;
        uint8_t buffer[2] = {0};
        int firstBit = 0;
        int secondBit = 0;

        if (0 == oldValue && (0 == mOrig->this_func(X_CONST1, buffer, 1))
        {
            secondBit = (int)(buffer[0] & MY_CONST2);
            firstBit = (int)(buffer[0] & MY_CONST1);
            if((oldValue != secondBit) && (0 != firstBit))
            {
                mOrig->those_func(secondBit);
                oldValue = secondBit;
                counter = TOTAL_VALUE;
            }
            return;
        }

        if (0 >= --counter && (0 == mOrig->this_func(X_CONST1, buffer, 1)))
        {
            uint8_t out = buffer[0] | MY_CONST2;
            mOrig->that_func(X_CONST2, &out, 1);
            oldValue = 0;
        }
        return;
    }

    private:
        Orig * mOrig;
}

Правильный тест

//mock_orig.cpp
#include "gtest/gtest.h"
#include "gmock/gmock.h"
#include <memory>

TEST(myTest, testMyFunction)
{
    std::shared_ptr<Orig> mO(new MockOrig);
    uint8_t buffer[1];
    EXPECT_CALL(*std::static_pointer_cast<MockOrig>(mO), this_func(X_CONST1, buffer, 1))
        .Times(1);
     CallingClass callerClass(mO.get());
     callerClass.calling_func();

}

int main(int argc, char **argv)
{
    testing::InitGoogleMock(&argc, argv);
    return RUN_ALL_TESTS();
}

Может кто-нибудь, пожалуйста, скажите мне, что все еще не так? Любая помощь / руководство будет очень признательно. Благодарность!

Google mock должен был напечатать, какие аргументы не соответствовали ожиданиям, не могли бы вы опубликовать его здесь?

Henrique Jung 28.10.2018 21:20

Одно я вижу прямо сейчас: локальная переменная buffer в CallingClass::calling_func не то же самое, что локальная переменная buffer в TEST(myTest, testMyFunction). Вы должны использовать правильный сопоставитель. Вы можете проверить EXPECT_CALL(*std::static_pointer_cast<MockOrig>(mO), this_func(X_CONST1, _, 1)), чтобы подтвердить мои наблюдения

PiotrNycz 06.11.2018 16:25
1
2
527
0

Другие вопросы по теме