gpt4 book ai didi

ruby - RSpec 不太严格的平等期望测试

转载 作者:行者123 更新时间:2023-11-28 21:28:26 25 4
gpt4 key购买 nike

我有以下测试:

it "can add an item" do
item = Item.new("car", 10000.00)
expect(@manager.add_item("car", 10000.00)).to eq(item)
end

项目的初始化看起来像(类具有 attr_accessor for、type、price 和 is_sold):

  def initialize(type, price)
@type = type
@price = price
@is_sold = false
@@items << self
end

经理的添加项目看起来像:

  def add_item(type, price)
Item.new(type, price)
end

此测试当前失败,因为这两个项目具有不同的对象 ID,尽管它们的属性相同。 Item 的初始化方法接受一个类型和一个价格。我只想检查这些功能是否相等...有没有办法严格测试属性相等性?

我试过 should be, should eq, to​​ be, and eql?没有运气。

最佳答案

假设您的类有一个用于读取这些属性的公共(public)接口(interface)(例如 attr_reader :type, :price),那么最明智的方法可能是实现一个 ==方法:

class Item
# ...

def ==(other)
self.type == other.type &&
self.price == other.price
end
end

这允许使用 == 比较任意两个项目,因此 RSpec 的 eq 方法将按预期工作。

如果您不希望您的类有相等方法,最好的办法可能是单独检查每个属性:

it "can add an item" do
expected = Item.new("car", 10000.00)
actual = @manager.add_item("car", 10000.00)

expect(actual.type).to eq(expected.type)
expect(actual.price).to eq(expected.price)
end

但是您可能会说,当您向 Item 添加功能时,这可能会成为可维护性挑战。

关于ruby - RSpec 不太严格的平等期望测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32302024/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com