このステートメントの仕様を作成しようとしています。「プット」で簡単
print "'#{@file}' doesn't exist: Create Empty File (y/n)?"
あなたの目標がこのメソッドをテストできることだけである場合、私は次のようにします:
class Executable
def initialize(outstream, instream, file)
@outstream, @instream, @file = outstream, instream, file
end
def prompt_create_file
@outstream.print "'#{@file}' doesn't exist: Create Empty File (y/n)?"
end
end
# when executing for real, you would do something like
# Executable.new $stdout, $stdin, ARGV[0]
# when testing, you would do
describe 'Executable' do
before { @input = '' }
let(:instream) { StringIO.new @input }
let(:outstream) { StringIO.new }
let(:filename) { File.expand_path '../testfile', __FILE__ }
let(:executable) { Executable.new outstream, instream, filename }
specify 'prompt_create_file prompts the user to create a new file' do
executable.prompt_create_file
outstream.string.should include "Create Empty File (y/n)"
end
end
ただし、このようなメソッドを直接テストするつもりはないことを指摘しておきます。代わりに、それを使用するコードをテストします。昨日見習い候補と話していて、彼は非常に似たようなことをしていたので、彼と一緒に座って、クラスの一部を再実装しました。
このようなことを話しているブログもあります。