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

Using partialy initialized object in tests

我担心在单元测试中使用 "improperly" 初始化对象。 假设我想测试一个函数:

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?

您的问题分为三个部分。有没有更好的方法我就不说了,不过你说的方法不错。

使用仅实现重要部分的虚拟对象的想法是标准的。使用测试替身的想法有多种变体。测试替身包括模拟、假冒、存根和间谍。使用这些字词搜索 google 应该会为您提供有关该想法的大量信息。这里有一篇文章 that explains the difference. Since you are using Google Test, you should look into how you can use the Google Mock extension 让你的测试翻倍。

第二个想法是让一个构建器来创建虚拟对象。两个相关的模式是 Object Mother 和 Test Data Builder。您可以搜索这些术语或开始使用 this article