我遇到了一个关于模拟需要你帮助的非虚方法的问题。 我提到了链接:Mock non-virtual method giving compilation error
我明白他们做了什么。但我有一个高级问题。假设我有:
*/
#include <iostream>
#include <gtest/gtest.h>
#include <gmock/gmock.h>
using ::testing::Invoke;
using ::testing::NiceMock;
template <class myclass> class Templatemyclass {
public:
myclass T;
void show() ;
};
template <class myclass> void Templatemyclass<myclass>::show()
{
T.show_text();
}
struct Test {
void display() { std::cout << __func__<<":-->Inside the display Test\n"; }
void show_text() {
display(); // HOW to re-route it to my_display() ? (>.<)
}
};
struct MockTest {
MOCK_CONST_METHOD0(display, void());
MOCK_CONST_METHOD0(show_text, void());
};
void my_display(){
{ std::cout <<__func__<<":-->Outside the display Test\n"; }
}
int main() {
//NiceMock<Templatemyclass<Test> > obj1;
//obj1.show();
NiceMock<Templatemyclass<MockTest> > obj2;
EXPECT_CALL(obj2.T, display())
.Times(1)
.WillOnce(Invoke(my_display));
obj2.show();
return 0;
}
我希望在调用show_text
时,它会调用display
。我尝试模拟display
并将其重新路由到my_display
,但那是失败的。我收到了错误。
../test_program.cpp:56: Failure
Actual function call count doesn't match EXPECT_CALL(obj2.T, display())...
Expected: to be called once
Actual: never called - unsatisfied and active
稍微改变上面的源代码。它可以工作,但这错过了我的期望。我想在display
中调用模拟 show_text
。
template <class myclass> class Templatemyclass {
public:
myclass T;
void show() ;
};
template <class myclass> void Templatemyclass<myclass>::show()
{
T.display();
}
struct Test {
void display() { std::cout << __func__<<":-->Inside the display Test\n"; }
// void show_text() {
// display(); // HOW to re-route it to my_display() ? (>.<)
// }
};
struct MockTest {
MOCK_CONST_METHOD0(display, void());
MOCK_CONST_METHOD0(show_text, void());
};
void my_display(){
{ std::cout <<__func__<<":-->Outside the display Test\n"; }
}
int main() {
NiceMock<Templatemyclass<Test> > obj1;
obj1.show();
NiceMock<Templatemyclass<MockTest> > obj2;
EXPECT_CALL(obj2.T, display())
.Times(1)
.WillOnce(Invoke(my_display));
obj2.show();
return 0;
}
屏幕显示:
display:-->Inside the display Test
my_display:-->Outside the display Test
请帮我解决这个问题。