gpt4 book ai didi

Ruby:Minitest、测试单元和实例变量

转载 作者:数据小太阳 更新时间:2023-10-29 07:08:05 33 4
gpt4 key购买 nike

(已在 https://www.ruby-forum.com/topic/6876320 发布,但在这里交叉发布,因为到目前为止我还没有收到回复)。

关于在 Minitest 和/或 Test::Unit 中并行化测试的问题(即正确使用 parallelize_me!):

假设我有一些辅助方法,几个测试都需要这些方法。根据我的理解,我不能用这种方法做这样的事情(简化示例):

def prep(m,n)
@pid = m
@state = n
end

def process
if @stat > 5 && @pid != 0
...
else
...
end
end

我想我不能在 Minitest 和测试单元中这样做,因为如果我从我的几个测试函数调用准备和处理,测试就不能再并行化——那些测试函数都设置和读取同一个实例多变的。对吧?

现在,我的问题是,以下方法对于并行化是否安全:我将所有这些可变实例变量设为一个散列,我在设置中对其进行了初始化,如下所示:

def setup
@pid ||= {}
@state ||= {}
end

我的“辅助方法”收到一个键(例如,测试名称方法)并使用它来访问他们“自己的”散列元素:

def prep(key,m,n)
@pid[key] = m
@state[key] = n
end

def process
if @stat[key] > 5 && @pid[key] != 0
...
else
...
end
end

有点难看,但是:这是一种可靠的方法吗?这种访问哈希线程安全的方式吗?我怎样才能做得更好?

最佳答案

至少在 Minitest 中你可以安全地做,例如,

setup do
@form = Form.new
end

没有 @form 在并行测试之间混淆,所以这种方法也应该是安全的:

def setup
@stat = m
@pid = n
end

这意味着您原来的方法也应该是安全的。

================

更新

考虑以下要点和一段代码,这些代码定义了 100 个不同的测试访问 @random,它在 setup https://gist.github.com/bbozo/2a64e1f53d29747ca559 中设置

您会注意到 setup 中设置的内容不会在测试之间共享,它在每次测试之前运行,基本上每个测试都被封装,因此线程安全不是问题。

关于Ruby:Minitest、测试单元和实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31857418/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com