2012-07-11 54 views
0

我以前在Rails中開發過。我發現編寫測試非常簡單,最近我轉移到了一個項目,在這個項目中我們的主要產品使用了MVC .NET。如何在MVC .NET中爲我的模型編寫測試(來自Rails背景)

我已經想出瞭如何使用MVC .NET,但我仍然不確定我應該如何去爲我的模型編寫單元測試。我會給我會怎麼寫我的單元測試中軌一個非常快的骯髒例如:

describe "user.name_is_newton?" 

    context "user's name is newton" do 
    before :each do 
     @user = User.create(:name => "newton") 
    end 

    it { @user.name_is_newton?.should be_true } 
    end  
end 

我發現很難切換的原因是因爲我習慣到Rails提供測試一個單獨的數據庫。它將(顯然)在後臺的測試數據庫中創建一個用戶條目,並使測試非常容易。我不確定如何在MVC .NET中編寫類似的測試。任何幫助表示讚賞!謝謝!

回答

0

在MVC中,你通常不希望爲單元測試使用數據庫,但嘗試重構,以便測試在IEnumerable上運行的方法< [entity]>或IQueryable < [entity] >甚至只是實體本身。這樣,你的單位只是儘可能地將一個'事物'作爲一般工作。但也許我會告訴你你已經知道的事情。

如果您絕對需要處理更復雜的對象,您需要嘲笑它們,或者再次重構使用接口,而只是模擬接口。

我確實有一個有用的MVC模擬庫,如HttpContextBase,HtmlHelper,HttpResponseBase,DbSet和像ShouldEqual這樣的助手。他們太長時間不必要地粘貼在這裏,但問,我會愉快地提供它們。他們使用Moq。

你上面的例子使用起訂量可能是:

方法測試:

public User CreateUser(string name) 
{ 
    return new User { Name = name }; 
} 

單元測試:

[Test] 
public void CreateUser_NameIsNewton() 
{ 
    var user = CreateUser("Newton"); 
    Assert.AreEqual(user.Name, "Newton"); 
} 
+0

,這可能是一個愚蠢的問題,但什麼是目標用戶?它是數據庫中的實體嗎?我們模擬用戶嗎? – Karan 2012-07-11 13:32:03

+0

@steveowen你從哪裏得到MVC嘲笑?你是自己寫的還是在網上找到的?我想看看他們看起來像什麼的一些例子。 – Dty 2012-07-12 05:04:28

+0

@Newton「用戶」將成爲您創建的模型。它可能是數據庫中的實體,或者它可能是您用於顯示目的的自己的模型。 (最好的做法是不要使用數據庫模型進行演示任務。) – 2012-07-12 11:49:46

相關問題