1

我正在構建mvc3應用程序,該應用程序應該服務約1000-2000個併發用戶, 我實現了Castle Active Record和簡單的存儲庫模式,現在我需要單元測試它將不會在併發和多線程上崩潰像iis這樣的環境。 我應該怎麼做?如何處理存儲庫的mutithreaded UnitTests來模擬併發性?

我正在使用nunit測試框架。

我的倉庫:

//interface 
public interface IAbstractRepository<T> where T : class 
{ 
    void Create(T model); 
    void Update(T model); 
    void Delete(T model); 
    int Count(); 

    T FindById(object id); 
    T FindOne(params ICriterion[] criteria); 
    IList<T> FindAll(); 
    IList<T> FindAllByCriteria(params ICriterion[] criteria); 
} 

//具體實施

public class AbstractRepository<T> : IAbstractRepository<T> where T : class 
{ 
    void IAbstractRepository<T>.Create(T model) 
    { 
     ActiveRecordMediator<T>.Save(model); 
    } 

    void IAbstractRepository<T>.Update(T model) 
    { 
     ActiveRecordMediator<T>.Update(model); 
    } 

    void IAbstractRepository<T>.Delete(T model) 
    { 
     ActiveRecordMediator<T>.Delete(model); 
    } 

    int IAbstractRepository<T>.Count() 
    { 
     return ActiveRecordMediator<T>.Count(); 
    } 

    T IAbstractRepository<T>.FindById(object id) 
    { 
     return ActiveRecordMediator<T>.FindByPrimaryKey(id); 
    } 

    T IAbstractRepository<T>.FindOne(params ICriterion[] criteria) 
    { 
     return ActiveRecordMediator<T>.FindOne(criteria); 
    } 

    IList<T> IAbstractRepository<T>.FindAll() 
    { 
     return ActiveRecordMediator<T>.FindAll(); 
    } 

    IList<T> IAbstractRepository<T>.FindAllByCriteria(params ICriterion[] criteria) 
    { 
     return ActiveRecordMediator<T>.FindAll(criteria); 
    } 
} 

回答

3

這不再是一個單元測試你正在嘗試做的。這是一個負載測試。有一些工具,在那裏,讓您記錄一些場景,然後模擬到Web應用程序執行此方案的併發訪問:

+0

假設性問題:如何在這裏使用多線程方法來爲我模擬許多用戶至少向我展示一個代碼示例? 在我去使用這些很酷的工具之前? +1爲好的答案。 – IamStalker

+1

沒有代碼。這個想法是,這些工具允許您記錄使用您的Web應用程序的場景。然後將其配置爲在負載下執行此方案。他們將照顧產卵線程和hamerring您的Web應用程序。顯然你的應用程序需要首先部署,以便測試更加真實。你可以有一個特定的環境來執行這些測試。在生產中啓動它們並不總是一個好主意。 –

+0

因此,例如,如果我看到併發問題的錯誤,我應該如何解決這個問題? – IamStalker