📅  最后修改于: 2023-12-03 15:04:56.186000             🧑  作者: Mango
RSpec 是一个针对 Ruby 语言的行为驱动开发(BDD)框架,它允许开发者编写可读性强的测试用例,并且在运行测试时会输出详细的结果信息。匹配器是 RSpec 中用来判断预期结果与实际结果是否相符的一种工具。
相等性匹配器用于判断预期值与实际值是否相等,包括:
eq
:判断对象是否被认定为相等;eql
:判断对象是否相等且类型相同;equal
:判断对象是否为同一个对象。示例代码:
expect("hello").to eq("hello")
expect(1 + 1).to eql(2)
expect("hello".upcase).not_to equal("hello")
比较运算符匹配器用于判断实际值是否大于、大于等于、小于、小于等于预期值,包括:
be > num
:判断实际值是否大于 num;be >= num
:判断实际值是否大于等于 num;be < num
:判断实际值是否小于 num;be <= num
:判断实际值是否小于等于 num。示例代码:
expect(5).to be > 0
expect("abc".length).to be <= 3
包含性匹配器用于判断集合中是否包含某元素,包括:
include
:判断集合中是否包含某元素;match
:判断字符串是否匹配某正则表达式。示例代码:
expect([1, 2, 3]).to include(2)
expect("hello").to match(/ll/)
真假值匹配器用于判断实际值是否等于 true 或 false,包括:
be_truthy
:判断实际值是否等于 true;be_falsey
:判断实际值是否等于 false;be_true
:与 be_truthy
等效。示例代码:
expect(1 == 1).to be_truthy
expect(1 == 2).to be_falsey
异常匹配器用于判断代码块是否抛出了指定类型的异常,包括:
raise_error
:判断代码块是否抛出异常;raise_exception
:与 raise_error
等效。示例代码:
expect { 1 / 0 }.to raise_error(ZeroDivisionError)
在 RSpec 中,开发者可以根据需求自定义匹配器。自定义匹配器需要实现一个名为 matches?
的方法和一个名为 failure_message
的方法。
matches?
方法用于判断实际值是否符合预期,接收一个参数,即实际值,返回一个布尔值:
RSpec::Matchers.define :even_number do
match do |actual|
actual % 2 == 0
end
end
failure_message
方法用于返回匹配不成功时的提示信息,接收一个参数,即实际值,返回一个字符串:
RSpec::Matchers.define :even_number do
match do |actual|
actual % 2 == 0
end
failure_message do |actual|
"expected #{actual} to be even number"
end
end
自定义匹配器可以增加代码的可读性和可维护性,使得测试用例更加精确。