2013-05-18 4 views
10

Я пытаюсь ознакомиться с насмешливой картой Google, поэтому я могу более легко применить некоторые TDD к моей разработке на C++. У меня есть следующий интерфейс:Google Mock Destructor

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

+0

Нет действия (по умолчанию), заданного для 'Die()' или любого другого издевательства ... –

+0

Согласно [documentation] (https://code.google.com/p/googlemock/wiki/ CheatSheet # Setting_Default_Actions), мне не нужно указывать действие по умолчанию, так как все мои методы используют один из примитивных типов. Я что-то упускаю? –

+4

Я запускаю Cygwin в Windows 7. После некоторого копания я обнаружил, что установка gtest_disable_pthreads в ON в моей конфигурации сборки решает проблему. –

ответ

4

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

Смежные вопросы