gmock, Ожидаемый: будет вызван один раз Фактический: никогда не вызывался - PullRequest
0 голосов
/ 04 марта 2020
#include <iostream>
using namespace std;
#include <string>
#include "gtest/gtest.h"
#include "gmock/gmock.h"
using ::testing::AtLeast;
using ::testing::Return;
using ::testing::_;

class User{
public:
    string Name;
    virtual void SetName(string tmpName){Name=tmpName;}
    virtual string GetName(){return Name;}
    virtual bool IsAdmin(){ 
        string admin="alley";
        if(admin.compare(Name)==0)//the contents of both strings are equal
            return true;
        return false;
    }
};

class MockUser:public User
{
    public:
    MOCK_METHOD1(SetName, void(string tmpName));
    MOCK_METHOD0(GetName, string());
    MOCK_METHOD0(IsAdmin, bool());
};

class Reservation{
public:
    User &BookName;
    Reservation(User user):BookName(user){}
    bool CanBeCancelBy(User cuser){
        cuser.IsAdmin();
        if(cuser.IsAdmin()==true)
            return true;
        if(cuser.GetName().compare(BookName.GetName())==0)//the contents of both strings are equal
            return true;
        return false;
    }
};
TEST(CanBeCancelBy, MockUserIsAdmin_ReturnTrue)
{
    //Arrange   
    MockUser admin;
    User a1;
    a1.SetName("a1");
    Reservation r1(a1);
    EXPECT_CALL(admin, IsAdmin()).Times(1).WillOnce(Return(true));
    //Act
    //bool result =admin.IsAdmin();
    bool result=r1.CanBeCancelBy(admin);
    //Assert
    EXPECT_EQ(result, 1);
}

int main()
{   
    testing::InitGoogleTest();
    return RUN_ALL_TESTS();
}

Я думаю, что IsAdmin () будет вызван, но это не так.

Результат выполнения представлен ниже:

[RUN] [mCanBeCancelBy.MockUserIsAdmin_ReturnTrue Reservation. cpp: 56: ошибка Ожидаемое равенство этих значений: результат Что: false 1 Reservation. cpp: 51: сбой Счетчик фактических вызовов функций не соответствует EXPECT_CALL (admin, IsAdmin ()) ... Ожидается: будет вызван один раз Фактически: никогда не вызывается - неудовлетворительно и активно [FAILED] [mCanBeCancelBy.MockUserIsAdmin_ReturnTrue (3 мс)

Может ли кто-нибудь помочь мне понять, что происходит?

...