我想编写一个测试来验证具有不同长度的有符号整数的二进制字符串表示。我不知道如何计算表示为二进制字符串的随机正整数和负整数的期望值,具有不同的二进制长度(8,16,32,64)。到目前为止,我有一个测试,只打印出检查值。
下面是测试(只打印结果,没有断言)和函数:
# test
def test_binary_string_with_length
10.times do
n = -rand(128)
puts "n: #{n} -> bin8: #{binary_string_with_length(n, 8)}"
n = rand(256)
puts "n: #{n} -> bin8: #{binary_string_with_length(n, 8)}"
n = -rand(2 ** 15)
puts "n: #{n} -> bin16: #{binary_string_with_length(n, 16)}"
n = rand(2 ** 16)
puts "n: #{n} -> bin16: #{binary_string_with_length(n, 16)}"
n = -rand(2 ** 31)
puts "n: #{n} -> bin32: #{binary_string_with_length(n, 32)}"
n = rand(2 ** 32)
puts "n: #{n} -> bin32: #{binary_string_with_length(n, 32)}"
n = -rand(2 ** 63)
puts "n: #{n} -> bin64: #{binary_string_with_length(n, 64)}"
n = rand(2 ** 64)
puts "n: #{n} -> bin64: #{binary_string_with_length(n, 64)}"
end
end
# function
def binary_string_with_length(n, int_length_in_bits)
pack = 'Q' # default is 64 bit
case int_length_in_bits
when 8
pack = 'C'
when 16
pack = 'S'
when 32
pack = 'L'
when 64
pack = 'Q'
end
sprintf('%b', [n].pack(pack).unpack(pack)[0])
end
如何编写断言来验证每个字符串表示是否正确?
答案 0 :(得分:6)
不要在单元测试中测试随机任意值。选择一组输入以测试其已知的预期输出。包括边缘情况。在生产中添加其他测试用例,以确保您不会引入回归。
用最简单的术语来说,构建一个输入到预期值的散列,然后遍历散列并断言实际值等于期望值。