我想测试 makeTvSeries() 方法而不提取 getNumberOfShows、printMsg 到其他类然后模拟它,所以我想模拟 TvChannel 类。
是否可以调用将调用子方法的基类方法(makeTvSeries):getNumberOfShows、printMsg 而无需摆脱虚拟性?所以我可以在其他测试中使用相同的模拟类定义,例如 foo.playTvSeries(mockTvChannel) 并期望调用 makeTvSeries?。
此外,我在做什么是好的做法吗?在整个程序中,还有其他使用 cin 和 cout 的类,正如我在开始时所说的那样,我不想将它们全部提取到一个负责输入/输出的类中。你的经历是什么,我应该怎么做?
class MockTvChannel : public TvChannel{
public:
MOCK_METHOD0(getNumberOfShows, int());
//MOCK_METHOD0(makeTvSeries, void());
MOCK_METHOD0(printMsg, void());
};
TEST(sample_test_case, sample_test)
{
MockTvChannel channel;
EXPECT_CALL(channel, getNumberOfShows())
.Times(1)
.WillOnce(::testing::Return(10));
EXPECT_CALL(channel, printMsg())
.Times(10);
channel.makeTvSeries();
}
class TvChannel
{
protected:
virtual int getNumberOfShows(){
int nShows;
std::cin >> nShows;
return nShows;
}
virtual void printMsg(){
std::cout << "What a show!" << std::endl;
}
public:
/*virtual*/ void makeTvSeries()
{
int nShows = getNumberOfShows();
for(int i = 0; i<nShows; ++i){
printMsg();
}
}
virtual ~TvChannel() {};
};