dan*_*ani 5 c++ googletest googlemock c++17
我在某个类中注入依赖项。此类存储与 an 的依赖关系std::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
}
Run Code Online (Sandbox Code Playgroud)
Jar*_*d42 10
*(dep.get())可以直接替换为*dep.
然后,您可以在移动它之前调用expect:
auto dep = std::make_unique<Dependency_Mock>();
EXPECT_CALL(*dep, plusOne(_)).WillOnce(Return(5));
SomeClass some;
some.inject(std::move(dep));
EXPECT_EQ(some.execute(5), 5); // execute
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8533 次 |
| 最近记录: |