我对单元测试中“初始化不正确”的初始化对象的使用感到担心。 假设我要测试一个函数:
void foo(SomeClass)
{
//do some stuff based on SomeClass.value
}
其中:
class SomeClass
{
OtherClass* ptr;
int uninterestingValue;
int value;
};
我想做的是创建函数(仅在单元测试中可用,即在匿名命名空间中),
SomeClass createDummy()
{
SomeClass dummy(nullptr, 0, //initialize uninteresting fields with nullptr/0
42) //42 will be used for testing purpose
}
原因:创建SomeClass类型的对象很复杂,因为它用来表示系统中数据处理的最终状态。我想简化一下。
会被认为是一种不好的方法吗?
是否有更好的方法来实现这一目标(专门讨论C ++ / googletest?
答案 0 :(得分:0)
您的问题分为三个部分。我不会讨论是否有更好的方法,但是您谈论的方法还不错。
使用仅实现重要部分的虚拟对象的想法是标准的。使用测试双打的想法有多种变体。测试双打包括模拟,假冒,存根和间谍。使用这些术语搜索Google应该会为您提供有关该想法的大量信息。这是文章that explains the difference。由于您使用的是Google测试,因此您应该研究如何use the Google Mock extension使测试翻倍。
第二个想法是关于使用构建器来创建虚拟对象。两个相关的模式是“对象母亲”和“测试数据生成器”。您可以搜索这些术语或开始使用this article。