我有一個工廠,返回一個智能指針。無論使用什麼智能指針,我都無法讓Google Mock嘲笑工廠方法。Google可以用智能指針返回類型來模擬一個方法嗎?
模擬對象是所有方法都是虛擬的純抽象接口的實現。我有一個原型:
MOCK_METHOD0(Create, std::unique_ptr<IMyObjectThing>());
我也得到:
"...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>'"
類型指出,在智能指針定義。
我得到它試圖訪問一個聲明爲private的構造函數,但我不明白爲什麼。當這是一個std :: auto_ptr時,錯誤表示沒有複製構造函數,這讓我感到困惑。
無論如何,有沒有辦法模擬一個返回智能指針的方法?或者有更好的方法來建造工廠?我唯一的決心就是返回一個原始指針(blech ...)?
我的環境是Visual Studio 2010 Ultimate和Windows 7.我沒有使用CLI。
你不需要對你的類的接口做任何改變,只是爲了讓它們與你的模擬框架一起工作。通常這是不可能的。這對我來說不是一個可接受的解決方案! –
工廠類返回一個原始指針對我來說似乎是不可接受的。在這種情況下,unique_ptr最有意義。它的設計部分是爲了解決「將結果分配給*每個*呼叫站點上的某個共享指針」的問題。 –
我不認爲這是正確的答案,將所有內容都改爲原始或共享所有權並不是一種解決方案,只是爲了測試事情! – paulm