Tengo una fábrica que devuelve un puntero inteligente. Independientemente del puntero inteligente que utilice, no puedo hacer que Google Mock se burle del método de fábrica.¿Puede Google simular un método con un tipo de retorno de puntero inteligente?
El objeto simulado es la implementación de una interfaz abstracta pura donde todos los métodos son virtuales. Tengo un prototipo:
MOCK_METHOD0(Create, std::unique_ptr<IMyObjectThing>());
Y consigo:
"...gmock/gmock-spec-builders.h(1314): error C2248: 'std::unique_ptr<_Ty>::unique_ptr' : cannot access private member declared in class 'std::unique_ptr<_Ty>'"
El tipo señalado en el se define el puntero inteligente.
Y entiendo que está tratando de acceder a uno de los constructores declarados privados, pero no entiendo por qué. Cuando esto era un std :: auto_ptr, el error decía que no había un constructor de copia, lo cual me confunde.
De todos modos, ¿hay alguna manera de simular un método que devuelve un puntero inteligente? ¿O hay una mejor manera de construir una fábrica? ¿Mi única determinación es devolver un puntero sin formato (blech ...)?
Mi entorno es Visual Studio 2010 Ultimate y Windows 7. No estoy usando CLI.
No debería necesitar hacer ningún cambio en las interfaces de sus clases solo para que funcionen con su estructura de simulación.A menudo, esto no es posible en absoluto. ¡Esta no es una solución aceptable para mí! –
No me parece aceptable que una clase de fábrica devuelva un puntero sin formato. En este caso, unique_ptr tiene más sentido. Fue diseñado en parte para resolver el problema de "asignar el resultado a un puntero compartido en * cada * sitio de llamadas". –
No creo que esta sea la respuesta correcta, cambiar todo a propiedad sin procesar o compartida no es una solución solo para probar cosas. – paulm