Ruby 需要其他方法返回的Rspec测试实例方法(存根?)
我想对那些已经存在的方法进行测试,但我尝试的一切似乎都不符合最佳实践,也不起作用 也许有人能支持我 待测试代码Ruby 需要其他方法返回的Rspec测试实例方法(存根?),ruby,rspec,mocking,tdd,stubbing,Ruby,Rspec,Mocking,Tdd,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_s
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试验
first specify似乎没有为除数方法和实例变量@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
这看起来像一个很好的shell,但是您尝试了什么来描述方法呢?
除数和
来自哪里?另外,您不应该对测试对象使用mock
,因为它不包含您的逻辑代码。@dave:是的。。。实际上我想试试,但我所做的一切似乎都不太正确。当我给除数加上一个值时,亚伦:我不知道怎么。。。尝试了几件事。。。有线索吗?你能发布一个模拟的例子吗?如果你能发布尽可能多的实际对象类代码,那将非常有帮助。嘿,非常感谢!有没有一个原因,为什么你使用descripe>context>it而不是descripe>specify(带注释)我发现,我在一个错误的地方(facepalm)打了它。我将在下面发布适合我的解决方案。specify
是it
的别名。对我来说,使用上下文
提供了语义含义。归根结底,这是个人的偏好。特别是对于这种直接的测试。