2011-06-14 116 views
0

我想寫一些代碼,如下面所示的示例,但在Java而不是Ruby和Mockito而不是RSpec。測試方法 - Ruby/RSpec與Java/Mockito

require 'rubygems' 
require 'rspec' 

class MyUtils 
    def self.newest_file(files) 
    newest = nil 
    files.each do |file| 
     if newest.nil? || (File.new(file).mtime > File.new(newest).mtime) 
     newest = file 
     end 
    end 
    newest 
    end 
end 

describe MyUtils do 
    it "should return the filename of the file with the newest timestamp" do 
    file_a = mock('file', :mtime => 1000) 
    file_b = mock('file', :mtime => 2000) 
    File.stub(:new).with("a.txt").and_return(file_a) 
    File.stub(:new).with("b.txt").and_return(file_b) 
    MyUtils.newest_file(['a.txt', 'b.txt']).should == 'b.txt' 
    end 
end 

在RSpec中,我可以存根File.new,但我不認爲我可以在Mockito中做到這一點?

我是否應該使用工廠來創建File對象,而是將工廠注入爲依賴項,然後爲測試存根工廠?

回答

0

是的,你需要注入一些東西。無論是工廠創建文件還是文件本身,它都取決於您。一旦你這樣做了,你可以在測試中嘲笑工廠。

1

This SO answer包括用Mockito嘲笑File類,也許它會有所幫助。