[英]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.