1
我想测试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() {};
};