1

呼び出し元のメソッドに基づいて何かを返すプライベート メソッドがあります。

private
def aPrivateMethod
  r = nil
  caller_method = caller[0][/`([^']*)'/, 1]

  case caller_method
     when "method_1"
        r = "I was called by method_1"
     when "method_2"
        r = "I was called by method_2"
  end

  return r
end

テスト ユニットを作成するとき、このプライベート メソッドを呼び出すメソッド名は method_1 でも method_2 でもなく、test で始まる何かになり、テストからパスを返すソリューションが見つかりません。

4

2 に答える 2

0

この目的のために、テスト クラスでプロキシ メソッドを作成できます。

def method_1 *args
  aPrivateMethod *args
end

そして、テストからこのメソッドを呼び出します。

于 2012-08-16T14:27:22.307 に答える
0

case 式で正規表現を使用します。

def aPrivateMethod
  caller_method = caller[0][/`([^']*)'/, 1]

  case caller_method
     when "method_1"
        "I was called by method_1"
     when "method_2"
        "I was called by method_2"
     when /^test_\d+/
        "test call from #{caller_method}"
     else nil
  end
end

また、そこには余分なコードがたくさんありました... r 変数はまったく必要ありません。

于 2012-08-16T14:22:27.753 に答える