我是一名新手测试和TDD,但决定尝试并学习。目前我正在尝试开发一个名为SettingsManager的类,该类将处理我的应用程序的设置。它将存储应用程序的状态,并在关闭SettingsManager时保存状态使用QSettings(并在启动时读取)。现在,我想模拟QSettings,以便我的测试不依赖于随机状态。然而,我找不到任何明智的方法来模拟/存根它,因为我需要的方法(QSettings :: value())不是虚拟的。
也许我在概念上做错了什么?或者有没有一种方法可以模拟那个非虚拟方法调用?
例如:假设我有这个类:
我希望以这种方式进行测试(我使用Hippomocks语法只是为了给出一个想法)。
也许我在概念上做错了什么?或者有没有一种方法可以模拟那个非虚拟方法调用?
例如:假设我有这个类:
class SettingsManager
{
private:
/* app state variables */
QSettings *settings;
bool m_objectsVisible;
public:
SettingsManager(QSettings *settings)
{
this->settings = settings;
}
void readSettings()
{
m_objectsVisible = settings.value("Settings/ObjectsVisible").toBool();
}
bool objectsVisible()
{
return m_objectsVisible;
}
};
我希望以这种方式进行测试(我使用Hippomocks语法只是为了给出一个想法)。
void TestObjectsAreVisible() {
MockRepository mocks;
QSettings *settingsMock = mocks.ClassMock<QSettings>();
mocks.ExpectCall(settingsMock , QSettings::value).With("Settings/ObjectsVisible").Return(true);
SettingsManager *sManager = new SettingsManager(settingsMock);
sManager->readSettings();
assertTrue(sManager->objectsVisible);
}