我正在比较数组中的值,但是当条件失败时,它会退出。在这里,我想比较数组的所有元素,无论通过和失败:
val.each do | x |
#assert_equal 48000.00, x
assert(48000.00 == x, message = " :Pass")
end
假设数组大小为20.它应该迭代20次而不管通过或失败条件,并且应该提高断言。
答案 0 :(得分:1)
在我回答你的问题之前:
问题听起来是错误的',如果测试失败,为什么还要继续? 我的印象是,对测试逻辑存在更深层次的误解。也许你可以提供更多信息来查看这个问题背后的问题。
这里是您问题的完整MWE:
class TestArray < MiniTest::Test
VAL = [
48000.0,
48000.0,
3,
48000.0,
]
def test_orig
VAL.each do | x |
assert(48000.00 == x, message = " :Pass")
end
end
这将测试数组中的所有条目是否为48000.0。您可以使用以下命令进行类似的测试:
def test_array #expects exact 4 entries.
assert_equal([48000.00,48000.00,48000.00,48000.00], VAL, message = " :Pass")
end
def test_array_2 #flexible number of entries
assert_equal([48000.00] * VAL.size, VAL, message = " :Pass")
end
def test_array_uniq
assert_equal([48000.00], VAL.uniq, message = " :Pass")
end
使用
def test_diff
assert_equal([], VAL - [48000.0], 'Entries not 48000.0 found')
end
你会得到所有条目不等于48000.0。
但仍有问题: 如果测试失败,为什么还要继续?
第一次失败后测试停止。所以唯一的可能性就是测试自己的测试例程中的每个值:
class TestArray < MiniTest::Test
VAL = [
48000.0,
48000.0,
3,
48000.0,
]
VAL.each_with_index do |val,i|
define_method :"test_single_value_#{i+1}" do
assert(48000.00 == val, message = "Diff for entry %i" % [i+1])
end
end
end
代码为数组中的每个条目生成一个测试。但要获得此测试的可能性,必须在测试运行之前知道VAL
。所以这可能不适合你的需要。