0

新しいConnectionオブジェクトを作成するための次のメソッドがあります。シリアルポートを開きます。ポートが存在しない場合は失敗することに注意してください。

class Connection
 def initialize(port)
   begin
      @serial = SerialPort.new(port, 9600, 8, 1, SerialPort::NONE)
    rescue
      exit(1)
    end
  end

  def send_command
    @serial.write "Something"
  end
end

私はこのメソッドのRSpec仕様を作成しましたが、これまでのところ良好です。次に、次のメソッド「send_command」を指定します。

Connection.new("/some/port")問題は、失敗する(ポートが存在しない)ため、この仕様を呼び出すことができないことです。新しいメソッドをスタブせずに作成メソッドをバイパスするにはどうすればよいですか?正しく理解していれば、テストしているクラスをスタブまたはモックすることはできませんよね?

ありがとう!

4

3 に答える 3

1

クラスのメソッドnewwriteメソッドをスタブすることができます。SerialPort

于 2011-03-11T08:55:04.533 に答える
1

ポート番号の代わりにSerialPortオブジェクト(依存性注入)、またはSerialPortオブジェクトを返すcreateメソッドを持つファクトリオブジェクト(抽象ファクトリパターン)を渡すことができます。その後、テストは偽の/モック/ダミーのSerialPortまたはSerialPortファクトリに合格する可能性があります。

しかし、おそらくそれは私の話ではC ++プログラマーであり、gnabのアドバイスはもっとRubyっぽいようです...

于 2011-03-11T09:05:38.280 に答える
0

これはややハッキーですが、を呼び出すのではなく、を呼び出すConnection.newことができますConnection.allocate。これにより、を呼び出さずにオブジェクトが作成されますinitialize

于 2011-03-13T22:59:36.400 に答える