【发布时间】:2015-06-07 18:16:12
【问题描述】:
我正在学习 ruby 和 TDD。我使用 Minitest 作为我的单元测试框架。 目前我有一个类(对),它将用第二个类(参与者)的两个实例进行初始化。为了对其进行单元测试,我想创建两个参与者模拟并将它们传递给初始化方法:
def test_init
participantOne = Minitest::Mock.new
participantOne.expect(:name, "P1")
participantOne.expect(:dept, "D1")
participantTwo = Minitest::Mock.new
participantTwo.expect(:name, "P2")
participantTwo.expect(:dept, "D2")
pair = Pair.new(participantOne, participantTwo)
assert_equal("P1", pair.participantOne.name) #I would like to change this line
assert_equal("P2", pair.participantTwo.name) # and this line
end
这可行,但不是 100% 正确。 如果我将断言相等行更改为
assert_equal(participantOne.name, pair.participantOne.name) #I would like to change this line
为了将存储的参与者的值与模拟的值(我想存储)进行比较,我得到了
MockExpectationError: 没有更多期望可用于 :name: []
说实话,我不是很明白。在我的代码执行过程中,我之前设置的“期望”似乎已经被“使用”了。
这不是我想要的。我不想验证一个方法被调用了多少次,我想定义一个在给定实例中调用该方法时返回的默认值。
如何使用 minitest 做到这一点?
我进行了一些搜索,并在 Minitest 中阅读了有关存根的信息。但据我了解,它们旨在为类的每个实例存根方法调用。
我想创建两个参与者并定义他们的姓名和部门信息,而不使用真实的班级,这样我就可以将我的测试重点放在被测主题上。
ps: 这是我的pair类中的init
def initialize(participantOne, participantTwo)
@participantOne = participantOne
@participantTwo = participantTwo
end
和参与者班级
def initialize(name, dept)
@name=name
@dept=dept
end
【问题讨论】:
标签: ruby unit-testing minitest