首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >单元测试大型数据集?

单元测试大型数据集?
EN

Stack Overflow用户
提问于 2008-10-24 22:03:44
回答 3查看 5.5K关注 0票数 11

对大型数据集进行单元测试的最佳方法是什么?我维护的一些遗留代码具有上百个成员或更多成员的结构;我们正在处理的代码的其他部分创建或分析数百个样本的数据集。

到目前为止,我找到的最好的方法是序列化磁盘中的结构或数据集,执行测试下的操作,将结果序列化到磁盘,然后将包含序列化结果的文件与包含预期结果的文件进行比较。这并不是非常快,而且它违反了单元测试的“不接触磁盘”原则。然而,我能想到的唯一替代方案(编写代码来初始化和测试数百个成员和数据点)似乎乏味得令人无法忍受。

有没有更好的解决方案?

EN

回答 3

Stack Overflow用户

发布于 2008-10-24 22:22:53

如果您试图实现的实际上是一个单元测试,那么您应该模拟出底层数据结构并模拟数据。这项技术使您可以完全控制输入。例如,您编写的每个测试可以处理单个数据点,并且您将为每个条件提供一组非常简洁的测试。有几个开源的模拟框架,我个人推荐Rhino Mock (http://ayende.com/projects/rhino-mocks/downloads.aspx)或NMock (http://www.nmock.org)。

如果你不可能模拟出数据结构,我建议你进行重构,这样你就能够:-)值得!或者,您可能还想尝试TypeMock (http://www.typemock.com/),它允许模拟具体的类。

但是,如果您正在对大型数据集进行测试,那么您实际上是在运行功能测试,而不是单元测试。在这种情况下,将数据加载到数据库或从磁盘加载数据是典型操作。而不是避免它,您应该让它与您的自动化构建过程的其余部分并行运行,这样性能影响就不会阻碍您的任何开发人员。

票数 3
EN

Stack Overflow用户

发布于 2008-10-24 22:13:56

这仍然是一种可行的方法。不过,我会将其归类为功能测试,或者不是纯粹的单元测试。一个好的单元测试应该是对那些记录进行采样,这些记录可以很好地分布您可能遇到的边缘情况,并将它们记录下来。然后,对所有数据进行批量测试,进行最后一次“验收”或“功能”测试。

我在测试大量数据时使用了这种方法,我发现它工作得足够好,因为小单元是可维护的,然后我知道批量测试是有效的,而且它是自动的。

票数 1
EN

Stack Overflow用户

发布于 2008-10-25 22:22:12

到目前为止,我发现的最好的方法是从磁盘序列化结构或数据集,执行测试下的操作,将结果序列化到磁盘,然后将包含序列化结果的文件与包含预期结果的文件进行比较。

我已经编写了使用上述技术的代码,除了在测试中不是从磁盘序列化之外,我已经将序列化的数据转换为一个字节数组,编译器可以将其放入可执行文件中。

例如,您的序列化数据可以转换为:

代码语言:javascript
复制
unsigned char mySerialisedData[] = { 0xFF, 0xFF, 0xFF, 0xFF, ... };

test()
{
    MyStruct* s = (MyStruct*) mySerialisedData;

}

有关更详细的示例(在C#中),请参阅此unit test。它展示了一个使用一些硬编码的序列化数据作为测试输入的示例,测试程序集签名。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/235402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档