2012-09-18 42 views
47

我剛剛觀看了Minitest的RailscastMinitest和Rspec

使用RSpec vs Minitest測試rails應用程序有什麼優缺點?我從RSpec轉換到Minitest會失去哪些功能?

+0

請參閱http://stackoverflow.com/questions/8423227/migrating-from-rspec-to-minitestspec – matt

+0

也許這兩個問題應該合併,是否有合併問題的方式? –

+10

+12票關閉!投票開放。 –

回答

69

我是RSpec開發人員之一,從未使用minitest,所以在閱讀此答案時考慮到我的偏見。總之,RSpec的強大之處在於它將如此多的測試概念轉化爲一流的對象。其中Test :: Unit和Minitest使用簡單的方法來進行斷言,RSpec使用支持否定,自我描述等的一流匹配器對象。 RSpec的示例是支持豐富元數據的一流對象; minitest/spec將it編譯爲簡單方法,但不支持相同類型的豐富元數據。 RSpec支持使用接受參數的第一類構造(共享示例組)來指定共享行爲; w/minitest你可以使用inheritance or a mixin to re-use tests,但它沒有相同類型的一流的支持。 RSpec具有明確的格式化程序API(並且有許多第三方格式化程序使用它);我不知道minitest具有相同類型的一流格式化程序API。作爲一個不斷運行測試和整天練習TDD的人,我發現RSpec的強大功能讓我非常有用。儘管如此,許多人認爲它是過度的,而且額外的抽象會增加認知成本。

這裏有一些特定的功能RSpec的有,我相信MINITEST缺乏:

  • before(:all)掛鉤(注意,這是應該很少使用的RSpec的電力用戶的功能,我只用它在幾在多年使用的RSpec的)
  • around(:each)鉤場合
  • 共用示例組
  • 共享上下文
  • 豐富的元數據支持,可以爲u sed來控制哪些示例得到運行,哪些示例組共享上下文被包括進來,哪些示例組模塊被混入等等。
  • 整合支持各種嘲笑功能w/rspec-mocks; Minitest :: Mock比較簡單得多,而且比較有限。
  • RSpec有rspec-fire,這是真棒。

使用效益MINITEST的:

  • 它的建成爲標準庫,所以你不需要安裝任何額外的費用。
  • 它可以用於def test_blahit 'blah'款式。
  • 代碼庫非常小且簡單。憑藉它的年齡和附加功能,RSpec相比之下更大。
  • Minitest的加載速度比RSpec快(它的約4個代碼文件相比RSpec有許多文件分佈在3個寶石中) - 但請注意,RSpec絕不是緩慢的;在我現在的大部分項目中,我都會在一秒鐘內(通常在500毫秒以內)獲得RSpec的測試反饋。

總的來說,它有點像Sinatra vs. Rails,我認爲Minitest和RSpec都是很好的選擇,這取決於你的需求。最後一件事:如果Minitest有特定的方面,你更喜歡,但是你更喜歡RSpec的其他方面,它們可以很容易地混合和匹配。如果你有興趣,我可以撥打wrote a blog post about this

+0

感謝您的驚人的解釋。 –

+2

請記住Boris,如果想要將MiniTest與Spork,Guard,Capybara以及任何類型的Javascript驅動程序集成在一起,那麼可以計劃花費整整一週的時間,試圖弄清楚它並使其穩定。當涉及到除了最基本的Rails應用程序之外的任何其他應用程序時,MiniTest還沒有準備好用於黃金時段。我給了它舊的大學嘗試自己,但它只是在挫折中結束。 – AKWF

4

我將Test/Unitshoulda轉換爲spec-style Minitest,並且它付出了代價。它取消了樣板,他們說這也提高了速度。我從來沒有真正使用RSpec。相反,我寫了自己的原始測試和嘲笑框架(僅僅是爲了理解嘲笑,我在切換到Minitest時放棄了它)。我認爲RSpec中的stubbing/mocking可能會更先進,所以如果你已經學會了,就繼續使用它。否則,堅持Minitest,這將使您能夠與那些對RSpec無知的人(比如我)進行合作。