Я пытаюсь ознакомиться с фальшивой картой Google, поэтому я могу более легко применить некоторые TDD к моей разработке на С++. У меня есть следующий интерфейс:
#include <string>
class Symbol {
public:
Symbol (std::string name, unsigned long address) {}
virtual ~Symbol() {}
virtual std::string getName() const = 0;
virtual unsigned long getAddress() const = 0;
virtual void setAddress(unsigned long address) = 0;
};
Я хочу проверить, вызван ли деструктор при удалении экземпляра. Поэтому у меня есть следующий класс MockSymbol:
#include "gmock/gmock.h"
#include "symbol.h"
class MockSymbol : public Symbol {
public:
MockSymbol(std::string name, unsigned long address = 0) :
Symbol(name, address) {}
MOCK_CONST_METHOD0(getName, std::string());
MOCK_CONST_METHOD0(getAddress, unsigned long());
MOCK_METHOD1(setAddress, void(unsigned long address));
MOCK_METHOD0(Die, void());
virtual ~MockSymbol() { Die(); }
};
Примечание. Я опустил включенные стражи в выше, но они находятся в моих файлах заголовков.
Я не смог дойти до точки, где я пока что ничего не тестировал. У меня есть следующее:
#include "gmock/gmock.h"
#include "MockSymbol.h"
TEST(SymbolTableTests, DestructorDeletesAllSymbols) {
::testing::FLAGS_gmock_verbose = "info";
MockSymbol *mockSymbol = new MockSymbol("mockSymbol");
EXPECT_CALL(*mockSymbol, Die());
}
Когда я выполняю свой тестовый бегун, мои другие тесты выполняются и передаются, как я ожидаю. Однако, когда выполняется вышеуказанный тест, я получаю следующую ошибку:
SymbolTableTests.cpp: 11: EXPECT_CALL (* mockSymbol, Die()) вызывается Сбой сегментации (сброс ядра)
Я провел последние несколько часов в поиске Google и пробовал разные вещи, но знаю. У кого-нибудь есть предложения?