我试图在Rspec测试中练习使用双打和模拟,以隔离依赖项。目前,我正在制作一个简单的银行程序,该程序有2个类-帐户类,负责交易逻辑,如更新余额,贷记,借方等。我还有一个对帐单类,负责根据帐户交易记录。
我的帐户类的初始化如下:
def initialize(statement = Statement.new)
@balance = 0.00
@credit = ''
@debit = ''
@date = Date.today.strftime('%d/%m/%Y')
@transaction = []
@statement = statement
end
我的Statement类的初始化如下:
def initialize
@display = []
end
(显示数组是交易数组的数组,交易数组是该特定帐户中发生的所有交易)。
在我的statement_spec.rb文件中,我想使用Account类的两倍。如何设置已经有完整显示对帐单的帐户双?目前,我有:
account = double(Account.new(statement = statement))
,但是我想确保显示中包含事务,因此我可以使用伪造且正常运行的帐户测试Statement类方法?
很抱歉,如果我没有清楚地说明这一点。竭尽全力去嘲弄我,所以我们将不胜感激!谢谢:)
更新: 我正在测试的方法是这样的:
def format
puts 'date || credit || debit || balance'
@display.map do |transaction|
return @display.join(' || ')
end
end
当前测试是这样:
describe '#format' do
it 'prints the statement as a table' do
account = Account.new
account.deposit(15.00)
account.complete_transaction
expect(account.statement.format).to eq Date.today.strftime('%d/%m/%Y') + ' || 15.00 || || 15.00'
end
end
答案 0 :(得分:0)
您的测试比它说的要做的要多得多。它只希望字符串具有某些格式,但是会做更多的工作。我会测试不同的东西:
您的statement_spec.rb
describe '.format' do
it 'returns the statement as a table' do
statement = Statement.new
statement.display = [15.00, 0, 15.00]
expect(statement.format).to eq Date.today.strftime('%d/%m/%Y') + ' || 15.00 || || 15.00'
end
end
以及您的帐户规格(我不知道您的实际代码,只是为了让您了解拆分规格的想法)
describe 'it sets statement display values' do
account = Account.new
account.deposit(15.00)
expect(account.statement.display).to include 15.00
end
现在,对帐单规范不关心帐户,并且与de statement相关的帐户对帐单具有真实的对帐单。