2012-09-13 41 views
0

我有兩個問題。第一個是基本的。 MiniTest是UnitTest的直接替代產品。所以如果你在rails中使用生成器,你會得到一堆ActiveSupport :: TestCase類。如果你使用MINITEST(不MINITEST規格護欄),那麼你可以做用MiniTest提取域對象

1.must_equal 1 
# instead of 
assert_equal 1, 1 

正確?所以這讓我感到困惑,爲什麼在railscast#327(pro episode paywall sry)中有一個MiniTest :: Unit :: TestCase類。看到我實際使用的測試套件時,會感到困惑。如果minitest是一個插件替換,那麼我使用minitest來執行testunit樣式的rails測試。如果我把它拿出來,我使用testunit來運行testunit測試?

假設我正在使用MiniTest來運行TestUnit樣式測試。

require 'test_helper' 
class FooTest < ActiveSupport::TestCase 
end 

在看完destroyallsoftware的關於提取域對象的截屏之後,我受到了啓發。他提出了一些關於避免加載test_helper.rb以加速測試套件而不訴諸於spork欺騙(這正是我所做的)的一些好的觀點。但是如何避免加載test_helper.rb,這是什麼使我從上面ActiveSupport :: TestCase?

你不能提取域對象,並將它們放在lib /或額外/使用MiniTest或TestUnit?

回答

2

對第一個問題的回答是「不,不正確」。 Minitest不是Test :: Unit的「替代品」。 Minitest爲大多數Test :: Unit提供了一個更簡單的實現,但不是全部。在Ruby 1.9中,Test :: Unit庫建立在Minitest的TestCase類之上,並填補了兩個庫之間的空白。

Minitest爲編寫測試提供了兩種模式:經典的TestCase方法和單獨的Spec DSL。像Test :: Unit一樣,Spec DSL建立在Minitest的TestCase之上。所以雖然1.9的Test :: Unit和Minitest的Spec DSL都是建立在Minitest的TestCase上的,但你不能在Test :: Unit中使用Spec DSL,因爲它不是它的祖先的一部分。

第二個問題的答案是,如果您想使用ActiveSupport :: TestCase,則無法避免使用test_helper.rb。您將需要minitest/autorun並讓您的測試類從MiniTest :: Unit :: TestCase繼承。

+0

優秀的迴應 – squarism