Фактическое количество вызовов функций не соответствует EXPECT_CALL (* mock, display ())

Я зову EXPECT_CALL на издевательской функции display(), но он возвращает ошибку времени выполнения

Actual function call count doesn't match EXPECT_CALL(*mock, display())...

выход

./GTest_static_example.tst

[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from GTest_static_example
[ RUN      ] GTest_static_example.case1
inside the GTEST_static_class:: display
display called from GTest_static_example
package/web/webscr/GTest_static_example.cpp:70: Failure
Actual function call count doesn't match EXPECT_CALL(*mock, display())...
Expected: to be called once
Actual: never called - unsatisfied and active
[  FAILED  ] GTest_static_example.case1 (0 ms)
[----------] 1 test from GTest_static_example (0 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (0 ms total)
[  PASSED  ] 0 tests.
[  FAILED  ] 1 test, listed below:
[  FAILED  ] GTest_static_example.case1

1 FAILED TEST

GTEST_static_class.h

#include<iostream>

using namespace std;
class GTEST_static_class
{
public:
GTEST_static_class()
{}

void display()
{
cout<< "inside the GTEST_static_class:: display " <<endl;
}
};

GTest_static_example.cpp

#include <gtest/gtest.h>
#include <gmock/gmock.h>
#include <iostream>
#include "GTEST_static_class.h"
using namespace std;
using ::testing::Return;class GTest_static_example : public::testing::Test
{
public:
virtual void SetUp();
virtual void TearDown();
void call_display()
{
GTEST_static_class *_class = new GTEST_static_class();
_class->display();
cout<<"display called from GTest_static_example"<<endl;
}

};class MockGTEST_static_class : public GTEST_static_class
{
public:
MockGTEST_static_class():GTEST_static_class()
{}

MOCK_METHOD0(display, void());
};int main(int argc, char* argv[])
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}

void GTest_static_example::SetUp()
{}

void GTest_static_example::TearDown()
{}

TEST_F(GTest_static_example, case1)
{
MockGTEST_static_class *mock = new MockGTEST_static_class();
EXPECT_CALL(*mock,display()).WillOnce(Return());
call_display();
delete mock;
}

0

Решение

Попробуйте что-то вроде:

#include <iostream>
#include <gtest/gtest.h>
#include <gmock/gmock.h>

class GTEST_static_class {
public:
virtual void display() { std::cout << "inside the GTEST_static_class:: display\n"; }
virtual ~GTEST_static_class() {}
};

class MockGTEST_static_class : public GTEST_static_class {
public:
MOCK_METHOD0(display, void());
};

class GTest_static_example : public ::testing::Test {
public:
void call_display(GTEST_static_class *instance) {
instance->display();
std::cout << "display called from GTest_static_example\n";
}
};

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

TEST_F(GTest_static_example, case1) {
MockGTEST_static_class mock;
EXPECT_CALL(mock, display()).WillOnce(::testing::Return());
call_display(&mock);
}

Вам нужно передать фактический экземпляр класса, на который вы рассчитываете. Также нужно сделать void display(); виртуальный, если вы хотите, чтобы макет мог переопределить его. Забыв добавить virtual к сожалению, не генерирует никаких предупреждений или ошибок компилятора — это просто то, что вы должны остерегаться. Вы также должны сделать GTEST_static_classВиртуальный деструктор, чтобы избежать нарезки.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector