[英]Rspec testing instance method which require other methods return (stubbing?)
我希望测试那些已经存在的方法,但是我尝试的一切似乎都不符合最佳实践,也没有用。
可能有人可以支持我吗?
代码待测试
def any_subset_greater?
divisors_sums.any?{|sum| sum > @value}
end
def no_subset_equal?
!divisors_sums.any?{|sum| sum == @value}
end
def check_room
any_subset_greater? && no_subset_equal?
end
RSPEC尝试
首先指定似乎没有为除数方法和实例变量@value设置适当的返回值。
describe "#any_subset_greater?" do
# Examples:
# [1,2] > 4 #=> false
# [1,2,3] > 4 #=> true
specify "returns true, when value in the array is greater" do
number.stub(:divisors){[1,2,3]}
number.stub(:value) {4}
expect(number.any_subset_greater?).to be_true
end
end
describe "#no_subset_equal?" do
# Examples:
# 4 === [1,2,4] #=> false
# 4 === [1,2,3] #=> false
# 4 === [1,2,6] #=> true
end
describe "#check_room" do
# testing condition from methods above
end
不知道如何设置对象,此答案只是一个猜测。 我将假设您的对象看起来像:
class SpecialNumber
attr_reader :divisor_sums
def initialize(n)
@value = n
# @divisor_sums is calculated here
end
# rest of your methods
end
因此,考虑到此对象,第一组测试可能类似于:
subject(:special_number) { SpecialNumber.new 4 }
describe "#any_subset_greater?" do
context "no divisor sums greater than value" do
it do
special_number.stub(:divisor_sums).and_return [1, 2]
expect(special_number.any_subset_greater?).to be_false
end
end
context "one divisor sum greater than value" do
it do
special_number.stub(:divisor_sums).and_return [1, 2, 5]
expect(special_number.any_subset_greater?).to be_true
end
end
context "several divisor sums greater than value" do
it do
special_number.stub(:divisor_sums).and_return [1, 2, 5, 6]
expect(special_number.any_subset_greater?).to be_true
end
end
end
但是您不必将其存根。 如果这是一个简单的类,则每次都只需创建一个新的对象,该对象具有预期的除数即可:
describe "#any_subset_greater?" do
context "no divisor sums greater than value" do
it do
expect(SpecialNumber.new(3).any_subset_greater?).to be_false
end
end
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.