我正在尝试使用 rspec 对一些 ruby 代码执行突变测试。我只是在学习红宝石,我真的不知道我是否做得对。我要测试的部分代码是:
class Cipher
def initialize()
@a_offset = 65 #'A'.unpack('C').first
@z_offset = 90 #'Z'.unpack('C').first
end
def encode(key, plain_text)
key_offset = key.upcase.unpack('C').first
cipher_text = plain_text.upcase.split('').collect do |letter|
cipher_letter = (letter.unpack('C').first + key_offset - @a_offset)
if cipher_letter > @z_offset
cipher_letter -= ( @z_offset - @a_offset + 1 )
end
cipher_letter.chr
end
return cipher_text.join
end
到目前为止,我的测试套件如下所示:
require 'rspec'
require 'Cipher'
describe "#initialize" do
it "should have correct @a_offset" do
encoder = Cipher.new()
expect(encoder.instance_variable_get(:@a_offset)).to eq 65
end
it "should have correct @z_offset" do
encoder = Cipher.new()
expect(encoder.instance_variable_get(:@z_offset)).to eq 90
end
end
describe "#encode" do
it "It should correctly encode Caesar with key = A"do
encoder = Cipher.new()
expect(encoder.encode('R', 'CAESAR')).to eq ("TRVJRI")
end
end
运行 rspec 时,我的 3 个测试通过了。但是,当我在这个套件上使用突变测试时,我只杀死了 3/343,这不是很好。