是否可以分析单元测试的内存使用情况?

Posted

技术标签:

【中文标题】是否可以分析单元测试的内存使用情况?【英文标题】:Is it possible to profile memory usage of unit tests? 【发布时间】:2011-02-25 04:31:25 【问题描述】:

我正在考虑使用 Visual Studio 附带的单元测试框架构建一些单元测试,以确定资源是否泄漏(或不泄漏)。

目前,我正在评估最新版本的 ANTS Profiler,但我无法完全确定它是否允许我从代码中强制创建快照(以便我可以拍摄快照,运行几次单元测试一百次,强制进行垃圾回收,并拍摄另一个快照,然后保存结果以供以后分析)。

这可能与 ANTS/Visual Studio 相关,还是我应该与其他分析器一起探索选项?

【问题讨论】:

【参考方案1】:

你见过JetBrains的dotmemory吗?

dotMemory Unit 是一个单元测试框架,允许您编写测试 检查您的代码是否存在各种内存问题。

例如:

当您需要简单地评估分配的内存量时 测试,你可以使用 AssertTraffic 属性。这种灵活的属性 允许您按对象类型、接口或 命名空间。

【讨论】:

【参考方案2】:

JetBrains dotTrace/dotMemory 和 ReSharper 在单元测试和分析方面有更好的集成。

http://www.jetbrains.com/profiler/index.html

不确定ANTS有没有这样的整合,不过你可以咨询红门售前对吧?

http://www.red-gate.com/about/all_testimonials.htm

他们确实希望您致电他们以获取更多信息。

【讨论】:

原来它应该在“未来版本”中得到支持 @RowlandShaw 你知道现在是否支持? @SimonFischer 我不知道 我正在寻找版本 7 的命令行参数。我已经尝试了可以​​在网上找到的版本 4 的文档,但它们在版本 7 中不起作用。 dotTrace 是一个性能分析器。 dotMemory 是一个内存分析器,dotMemory Unit 是一个框架,专门用于通过单元或集成测试检查您的代码是否存在各种内存问题。【参考方案3】:

我使用 ANTS 探查器,我发现最方便的是将探查器附加到正在运行的测试进程中,这可能因您使用的测试框架而异。例如,我使用 Resharper,进程映像名称类似于:

JetBrains.ReSharper.TaskRunner.CLR...

【讨论】:

【参考方案4】:

对于未来的读者,值得一提的是,您可以使用 ANTS Memory Profiler 从代码中强制创建快照。你需要参考

RedGate.MemoryProfiler.Snapshot.dll

包含在 ANTS 安装目录中。然后,您可以通过调用来拍摄快照

RedGate.MemoryProfiler.Snapshot.TakeSnapshot("可选快照名称")

Full details here.

【讨论】:

以上是关于是否可以分析单元测试的内存使用情况?的主要内容,如果未能解决你的问题,请参考以下文章

内存泄漏单元测试 C++

没有内存数据库的单元测试 dao 层

JaCoCo:分析单元测试覆盖率的利器

使用MOCK对象进行单元测试

如何记录我的控制台应用程序的 CPU/网络使用情况,替代 c# 中的单元测试

单元测试