2012-01-05 27 views
2

我在提供的框架中編寫客戶端組件,並且需要能夠單元測試我的組件。這些組件使用MVP(Model-View-Presenter)模式編寫,我想使用PEX爲我的演示者自動生成單元測試。如何讓PEX在具體對象是依賴關係時使用模擬對象,然後自動生成測試用例?

以下是主講人的代碼。

public partial class CompetitorPresenter : PresenterBase 
{ 

    private readonly ICompetitorView _view; 

    public IGlobalDataAccess GlobalDataAccess; 

    public IGlobalUI Globals; 

    public SystemClient Client; 

    public bool DeleteRecord() 
    { 
      if (_view.CompetitorName != "Daniel") 
       return false; 
      if (Client.SystemName != "Ruby") 
       return false; 
      return true; 
    } 
} 

我遇到的問題是,對象SystemClient是由框架提供的,我不能用一個工廠類創建的SystemClient一個實例。因此,當我運行PEX自動生成單元測試時,我必須告訴PEX忽略SystemClient,結果是DeleteRecord方法沒有完全覆蓋,因爲Client.SystemName != "Ruby"未被測試。

鑑於我在模擬對象MSystemClient(使用摩爾創建的),我想知道如果在某處的配置,我可以告訴PEX使用MSystemClient,讓PEX自動生成測試用例完全覆蓋此方法。

回答

0

您正處於正確的軌道上。如果創建的CompetitorPresenter.Client實例,你無法控制,你可以定義一個摩爾的所有實例:

MSystemClient.AllInstances.SystemNameGet =() => "SomeName"; 

你的單元測試有在「託管環境」來運行:

[HostType("Moles")] 
public void TestMethod() 
{ 
    MSystemClient.AllInstances.SystemNameGet =() => "SomeName"; 

    // Test code... 
} 
+0

感謝斯特凡。我之後的解決方案是讓PEX自動生成測試用例,而無需手動編寫摩爾代碼。我希望有一個PEX配置選項。 – 2012-01-06 10:01:33

相關問題