47

このステートメントの仕様を作成しようとしています。「プット」で簡単

print "'#{@file}' doesn't exist: Create Empty File (y/n)?"
4

2 に答える 2

3

あなたの目標がこのメソッドをテストできることだけである場合、私は次のようにします:

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

ただし、このようなメソッドを直接テストするつもりはないことを指摘しておきます。代わりに、それを使用するコードをテストします。昨日見習い候補と話していて、彼は非常に似たようなことをしていたので、彼と一緒に座って、クラスの一部を再実装しました

このようなことを話しているブログもあります。

于 2013-05-12T13:21:44.193 に答える