测试 ruby 块执行的 yield 方法
Test ruby yield method for block execution
每当我将块传递给 Ruby 中的 yield 方法时,我想知道该块是否实际执行了。例如:
def yield_method(list)
list.each do |item|
yield item
end
end
yield_method(ARGV) { |item|
print item
}
print "executed"
我想要
print "executed"
仅当传递给 yield 方法的块被执行时才向 运行 声明
您需要在块外初始化一个变量,然后在块内设置它,然后进行测试。
executed = false
yield_method(ARGV) do |item|
executed = true
# whatever else
end
print "executed" if executed
或者您可以将yield_method
修改为return一个基于是否满足要执行的块的条件的值:
def yield_method(list)
list.each do |item|
yield item
end
list.any?
end
executed = yield_method(ARGV) { ... }
print "executed" if executed
也就是说,需要知道一个块是否被执行对我来说很难闻 - 我会让你的测试成为允许块执行的条件的测试(如第二种形式),并且编写代码以在语义上反映这一点。例如:
def process_argv(list)
list.each do |item|
yield item
end
list.length
end
args_processed = process_argv(ARGV) { ... }
print "executed" if args_processed > 0
这反映出在这种情况下,您关心是否有要处理的参数,而不是是否最终调用了某个块。如果该块有您关心的副作用,您应该直接测试该副作用,而不是基于块执行假设它。
每当我将块传递给 Ruby 中的 yield 方法时,我想知道该块是否实际执行了。例如:
def yield_method(list)
list.each do |item|
yield item
end
end
yield_method(ARGV) { |item|
print item
}
print "executed"
我想要
print "executed"
仅当传递给 yield 方法的块被执行时才向 运行 声明
您需要在块外初始化一个变量,然后在块内设置它,然后进行测试。
executed = false
yield_method(ARGV) do |item|
executed = true
# whatever else
end
print "executed" if executed
或者您可以将yield_method
修改为return一个基于是否满足要执行的块的条件的值:
def yield_method(list)
list.each do |item|
yield item
end
list.any?
end
executed = yield_method(ARGV) { ... }
print "executed" if executed
也就是说,需要知道一个块是否被执行对我来说很难闻 - 我会让你的测试成为允许块执行的条件的测试(如第二种形式),并且编写代码以在语义上反映这一点。例如:
def process_argv(list)
list.each do |item|
yield item
end
list.length
end
args_processed = process_argv(ARGV) { ... }
print "executed" if args_processed > 0
这反映出在这种情况下,您关心是否有要处理的参数,而不是是否最终调用了某个块。如果该块有您关心的副作用,您应该直接测试该副作用,而不是基于块执行假设它。