在测试中使用局部初始化的对象

时间:2018-10-25 16:16:13

标签: c++ unit-testing googletest

我对单元测试中“初始化不正确”的初始化对象的使用感到担心。 假设我要测试一个函数:

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?

1 个答案:

答案 0 :(得分:0)

您的问题分为三个部分。我不会讨论是否有更好的方法,但是您谈论的方法还不错。

使用仅实现重要部分的虚拟对象的想法是标准的。使用测试双打的想法有多种变体。测试双打包括模拟,假冒,存根和间谍。使用这些术语搜索Google应该会为您提供有关该想法的大量信息。这是文章that explains the difference。由于您使用的是Google测试,因此您应该研究如何use the Google Mock extension使测试翻倍。

第二个想法是关于使用构建器来创建虚拟对象。两个相关的模式是“对象母亲”和“测试数据生成器”。您可以搜索这些术语或开始使用this article