Подтвердить что ты не робот

Google Mock Destructor

Я пытаюсь ознакомиться с фальшивой картой 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 и пробовал разные вещи, но знаю. У кого-нибудь есть предложения?

4b9b3361

Ответ 1

Я обнаружил, что установка gtest_disable_pthreads в ON в моей конфигурации сборки решает проблему.