1
私はいくつかのクラスに依存関係を挿入します。このクラスは、依存関係をstd::unique_ptr
で保存するため、オブジェクトの唯一の所有者です。gmockでunique_ptrとして保存されているオブジェクトをモックするにはどうすればよいですか?
この依存関係でメソッドをモックする正しい方法は何ですか?私の現在の解決策は、私が所有権を引き渡す前に、unique_ptr
から生のポインタを得ることです。これが機能する間、私はそれを行うより良い方法があると思います。彼らは何ですか?
class Dependency
{
public:
virtual int plusOne(int x) {return x+1;}
};
class Dependency_Mock : public Dependency
{
public:
MOCK_METHOD1(plusOne, int(int));
};
class SomeClass
{
public:
void inject(std::unique_ptr<Dependency> dep) {dependency = std::move(dep);}
int execute(int x) {return dependency->plusOne(x);}
private:
std::unique_ptr<Dependency> dependency;
};
TEST(SomeClassTest, executeTestWithMock)
{
SomeClass some;
auto dep = std::make_unique<Dependency_Mock>();
auto& dep_ref = *(dep.get()); // This is kind of ugly.
some.inject(std::move(dep));
EXPECT_CALL(dep_ref , plusOne(_))
.WillOnce(Return(5));
EXPECT_EQ(some.execute(5), 5); // execute
}
ああ、私は以下を参照してください
その後、あなたはそれを移動する前に、期待呼び出すことができます。私はEXPECT_CALLに入ったことが、呼び出しが行われるまで有効でなければならないと考えました。 – dani