У меня есть класс, конструктор которого принимает функцию Boost, и я хотел бы проверить его с помощью Google Mock. Следующий код показывает пример класса и мою попытку его проверить:
MyClass.h:
#include <boost/function.hpp>
class MyClass
{
public:
MyClass(boost::function<void()> callback);
void callCallback();
private:
boost::function<void()> m_callback;
};
MyClassTest.cpp:
#include <gtest/gtest.h>
#include <gmock/gmock.h>
#include <boost/bind.hpp>
#include "MyClass.h"
class CallbackMock
{
public:
MOCK_METHOD0(callback, void());
};
TEST(MyClassShould, CallItsCallback)
{
CallbackMock callbackMock;
MyClass myClass(boost::bind(&CallbackMock::callback, callbackMock));
EXPECT_CALL(callbackMock, callback()).Times(1);
myClass.callCallback();
}
Попытка скомпилировать MyClassTest.cpp в Visual Studio 2008 приводит к следующей ошибке:
... gmock / gmock-генерируемой функцией-mockers.h (76)
: ошибка C2248:
'Тестирование :: Внутренняя :: FunctionMockerBase :: FunctionMockerBase'
: не может получить доступ к приватному члену
объявлен в классе
'Тестирование :: внутренний :: FunctionMockerBase'
1> с 1> [1>
F = void (void) 1>] 1>
... / gmock-spec-builders.h (1656): см.
декларация о
'Тестирование :: Внутренняя :: FunctionMockerBase :: FunctionMockerBase'
1> с 1> [1>
F = void (void) 1>] 1>
Эта диагностика произошла в
сгенерированная компилятором функция
«Тестирование :: Внутренняя :: FunctionMocker :: FunctionMocker (Const
тестирование :: внутренний :: FunctionMocker
&) '1> с 1> [1>
Функция = void (void) 1>]
Ошибка связана со строкой, содержащей boost :: bind. Замена смоделированного метода на void callback () {} устраняет ошибку компиляции (но также исключает использование Google Mock, не позволяя достичь цели). Возможно ли то, что я пытаюсь сделать, не изменяя тестируемый класс?