【发布时间】:2017-06-22 18:32:36
【问题描述】:
我正在尝试使用 Google Mock 测试测试是否已调用并执行了基类中的方法。我有一个简单的 BankAccount 类,它实现了一个函数withdraw。在 BankAccount.h 文件中:
class BankAccount {
public:
BankAccount();
int withdraw(int balance, int withdrawalAmount);
};
在 BankAccount.cpp 文件中:
#include "BankAccount.h"
BankAccount::BankAccount()
{
}
int BankAccount::withdraw(int balance, int withdrawalAmount)
{
if (withdrawalAmount <= balance)
{
balance -= withdrawalAmount;
}
return balance;
}
在 test.h 文件中我有:
#include "BankAccount.h"
class MockBankAccount : public BankAccount {
public:
MockBankAccount();
MOCK_METHOD2(withdraw, int(int balance, int withdrawalAmount));
};
我的 MockBankAccount 类继承自 BankAccount 类。
在我的 test.cpp 文件中:
#include <gtest/gtest.h>
#include <gmock/gmock.h>
#include "test.h"
using namespace testing;
// Constructors/Destructors
MockBankAccount::MockBankAccount()
{
}
TEST(WithdrawAccountTest, Withdraw)
{
MockBankAccount mockAccount;
EXPECT_CALL(mockAccount, withdraw(5, 1))
.Times(1);
mockAccount.withdraw(5, 1);
}
// Main
int main(int argc, char* argv[])
{
InitGoogleTest(&argc, argv);
InitGoogleMock(&argc, argv);
return RUN_ALL_TESTS();
}
我想检查是否从 BankAccount 类调用并执行了withdraw 方法(即执行了 BankAccount::withdraw)。当我运行测试时,它通过了,我希望withdraw 已被调用并执行,但是如果我在 BankAccount::withdraw 上放置一个断点并进行调试,我可以看到它实际上从未到达基类中的方法。有没有办法使用 Google Mock 来检查 BankAccount::withdraw,例如使用其他方法(组合而不是继承、模板等)?
【问题讨论】:
标签: c++ unit-testing inheritance googletest googlemock