0

很难找到关于 Mocha 的任何文档,所以恐怕我完全在海上。我发现传递参数的存根方法存在问题。因此,例如,如果我设置这样的类:

class Red
  def gets(*args)
    @input.gets(*args)
  end
  def puts(*args)
    @output.puts(*args)    
  end
  def initialize
    @input = $stdin
    @output = $stdout
  end
  private
  def first_method
    input = gets.chomp
    if input == "test"
      second_method(input)
    end
  end
  def second_method(value)
    puts value
    second_method(value)
  end
end

是的,它是人为的,但它是对您可能有一个不想在测试中调用的方法的想法的简化。

所以我可能会写一个测试,例如:

setup do   
  @project = Red.new   
  @project.instance_variable_set(:@input, StringIO.new("test\n"))              
  @project.stubs(:second_method) 
end 
should "pass input value to second_method" do
  @project.expects(:second_method).with("test").once
  @project.instance_eval {first_method} 
end

现在我希望这会通过。但相反,我收到了这个相当神秘的错误消息:

Errno::ENOENT: No such file or directory - getcwd
/Users/i0n/.rvm/gems/ruby-1.9.2-head/gems/mocha-0.9.8/lib/mocha/backtrace_filter.rb:12:in `expand_path'
/Users/i0n/.rvm/gems/ruby-1.9.2-head/gems/mocha-0.9.8/lib/mocha/backtrace_filter.rb:12:in `block in filtered'
/Users/i0n/.rvm/gems/ruby-1.9.2-head/gems/mocha-0.9.8/lib/mocha/backtrace_filter.rb:12:in `reject'
/Users/i0n/.rvm/gems/ruby-1.9.2-head/gems/mocha-0.9.8/lib/mocha/backtrace_filter.rb:12:in `filtered'
/Users/i0n/.rvm/gems/ruby-1.9.2-head/gems/mocha-0.9.8/lib/mocha/expectation_error.rb:10:in `initialize'
/Users/i0n/.rvm/gems/ruby-1.9.2-head/gems/mocha-0.9.8/lib/mocha/mockery.rb:53:in `new'
/Users/i0n/.rvm/gems/ruby-1.9.2-head/gems/mocha-0.9.8/lib/mocha/mockery.rb:53:in `verify'
/Users/i0n/.rvm/gems/ruby-1.9.2-head/gems/mocha-0.9.8/lib/mocha/api.rb:156:in `mocha_verify'
/Users/i0n/.rvm/gems/ruby-1.9.2-head/gems/mocha-0.9.8/lib/mocha/integration/mini_test/version_131_and_above.rb:27:in `run'

这对我来说绝对没有任何意义,除了 Mochas 肠子深处的某些东西刚刚响起。如果我在没有将参数传递给第二种方法的情况下编写相同类型的测试,我不会有任何问题。我错过了什么吗?

4

2 回答 2

0

抱歉——我才看到这个。最好在Lighthouse中向我们提交错误报告。你找到了什么文档?你看过Rubyforge 上的 RDoc吗?您正在寻找什么样的文档而您没有找到?

我一直无法重现您的错误。您使用的是哪个版本的 Ruby、Rubygems、Shouda 和 Mocha?

您可以在此 Gist中查看我运行您的测试的结果。

于 2010-12-02T13:15:53.233 回答
0

我认为这一定是导致问题的原因。我使用测试/单元,一切似乎都很好。

需要“红宝石”
需要“测试/单元”
需要'摩卡'
需要 File.dirname(__FILE__) + '/../src/red'

类 RedTest < Test::Unit::TestCase

    默认设置
        @project = Red.new   
        @project.instance_variable_set(:@input, StringIO.new("test\n"))              
        @project.stubs(:second_method)
    结尾


    def test_description_of_thing_being_tested
        @project.expects(:second_method).with("test").once
        @project.instance_eval {first_method}
    结尾

结尾

给出以下输出:

stephen@iolanta:~/tmp/red/test # ruby​​ red_test.rb
加载套件 red_test
开始
.
在 0.000679 秒内完成。

1 次测试,1 次断言,0 次失败,0 次错误
stephen@iolanta:~/tmp/red/test #  
于 2010-05-31T17:44:09.523 回答