Ruby 如何使用gem`memory\u profiler`编写单元测试?

Ruby 如何使用gem`memory\u profiler`编写单元测试?,ruby,unit-testing,memory,memory-leaks,Ruby,Unit Testing,Memory,Memory Leaks,例如,我们有类实现: class Memory def call 2 * 2 end end 我们可以通过内存探查器使用情况获取报告: require 'memory_profiler' MemoryProfiler.report{ Memory.new.call }.pretty_print 当内存增加或内存泄漏以及内存#call发生变化时,如何对此进行单元测试 例如,如果我们要以这种方式更改内存#调用: - 2 * 2 + loop { 2 * 2 } 我认为您不应该将

例如,我们有类实现:

class Memory
  def call
   2 * 2
  end
end
我们可以通过内存探查器使用情况获取报告:

require 'memory_profiler'
MemoryProfiler.report{ Memory.new.call  }.pretty_print
当内存增加或内存泄漏以及
内存#call
发生变化时,如何对此进行单元测试

例如,如果我们要以这种方式更改
内存#调用

- 2 * 2
+ loop { 2 * 2 }

我认为您不应该将其作为单元测试,因为测试是一个有点不同的环境—它不应该知道代码的时间成本或内存成本,它不应该验证度量,它是其他工具的工作

对于您的情况,我建议您编写一些模块,您可以在其中断言分配的内存对您来说是合适的,例如,您可以做一些事情

模块MyMemsizeNotifier
延伸自我
允许的内存大小=0..4640
#或者您可以接收block、lambdas和procs
#我把它留给你
def呼叫(klass)
报告=MemoryProfiler.report
克拉斯,新电话
结束
超过\u限制?(报告。分配的\u总数\u内存大小)
报告
结束
def超过_限制?(总_使用量)
如果允许返回\u MEMSIZE.include?(总使用量)
#在rollbar中通知,将日志写入标准输出或文件或任何其他通知方式
结束
结束
##用法
类MyController
def索引
...
MyMemsizeNotifier.call(内存)
...
结束
结束

老实说,我会先问“为什么?”再问“如何?”。为什么你需要这样一个奇怪的测试?检查分配的内存是否超过了谢谢!这正是我想要的,还有一个问题:你是如何得到这个号码的?@AlexeyStrizhak我只是在我的控制台中运行一个简单的例子,只是为了自己玩gem。您可以将其更改为所需的,例如,将您的代码包装在
memory\u profiler
block and pass code中,并检查
report
result对象,您将获得此
total\u allocated\u memsize
对于我来说,它是
4640