如何解决可单元测试的类成员变量:我应该使用对象还是指针?
从这个网站上的帖子来看,this one 和 this one 似乎很清楚,如果可以的话,共识是使用本地对象,引用了许多优点。但是,这两篇文章似乎都没有提到需要对包含另一个类对象作为其成员的类进行单元测试。
当人们问如何在 C++ 中模拟这样的成员对象时,这似乎是一个完全不同的故事,而突然每个人都说“使用指针”。请参阅 this post 或 this one。
这两种方法是否完全相互冲突?鉴于质量代码应该非常需要单元测试,围绕 using object or pointer
的对话是否应该始终考虑到模拟的容易性?
所以基本上,以下应该是首选方式(是的,我不需要 Dependency
范围之外的 TestObject
对象的生命)。但我无法模拟 Dependency
对象:
class TestObject {
private:
Dependency mDep;
...
}
或者使用指针,这是mocking的goto解决方案,但是......我是否只是因为单元测试而必须这样写?
class TestObject {
private:
Dependency* mDep;
...
}
或者使用 unique_ptr
class TestObject {
private:
std::unique_ptr<Dependency> mDep;
...
}
此外,在 unique_ptr
。似乎为了在“模拟”成员变量上 EXPECT_CALL
,如果它封装在 unique_ptr
中,我必须进一步执行以下操作:
//constructor of testing object
TestObject():mDep(std::move(mockDependency));
//Have to grab the raw pointer before mockDependency loses ownership
Dependency* d = mockDependency.get();
...
EXPECT_CALL(*d,a_function_called_on_mDep());
我错过了什么吗?有没有另一种方法可以用模拟编写单元测试而不必使用指针?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。