Gmock调用功能两次

use*_*600 5 c++ unit-testing googletest

我想模拟返回void的函数:

class FileDownloaderMock : public FileDownloader
{
public:
    MOCK_CONST_METHOD1(downloadFile,
                       void(data *data_ptr));

}; 
Run Code Online (Sandbox Code Playgroud)

在测试用例中,我想两次调用此函数,首先应引发异常,第二次应可以正常工作。所以我的测试用例看起来像这样,但是不起作用。

TEST_F(BCtrlTargetBdDownloaderTests, DownloaderShouldCorrectlyDownloadTargetBdInFirstAttempt)
{
     EXPECT_CALL(m_fileDownloader, downloadFile( DataReqMatcher(l_expectedReq) ) ).Times(2)
        .WillOnce(Throw(UpgradeException("Download failed") )); 
    }
Run Code Online (Sandbox Code Playgroud)

控制台输出:

到EXPECT_CALL(m_fileDownloader,downloadFile(DataReqMatcher(l_expectedReq)))中指定的几个操作...预期被调用两次,但只有1个WillOnce()。

那么我该如何解决这个难题呢?最好的祝福

πάν*_*ῥεῖ 6

您的EXPECT_CALL配置应如下所示

 EXPECT_CALL(m_fileDownloader, downloadFile( DataReqMatcher(l_expectedReq) ) )
    .Times(2)
    .WillOnce(Throw(UpgradeException("Download failed")))
    .WillOnce(Return()); 
Run Code Online (Sandbox Code Playgroud)