2014-11-25 88 views
1

好的我在這種情況下有一個相當困難的問題 - 我有一個類,其中包含需要類控制器類的方法。我不知道如何嘲笑這個測試,所以如果任何人都可以幫助我真的很感激它!模擬控制器和模型狀態在另一個類中 - C#,.Net,Moq

public void Class(Controller controller, Model model) 
    { 
     if (model.Address != null && model.Address.Country != null && model.Address.Country.CountryId > 0) 
      model.Address.Country = _countryService.Find(*expression for id here*); 
     else 
      model.Address.Country = null; 
     controller.ModelState.RemoveRange(controller.ModelState.Where(i => i.Key.StartsWith("Address.Country")).ToList()); 
     controller.ModelState.RemoveRange(controller.ModelState.Where(i => i.Key.Contains(" *Stuff here* ")).ToList()); 
     controller.ModelState.Remove("owner"); 
    } 

所以在這裏我的問題是,控制器類是一個抽象類,從多個其他類繼承:

public abstract class Controller : Class1, Class2, Class3, Class4, Class5, Class6, Class7, Class8, Class9 
{ 
    *Lots of un-needed code here* 
} 

我需要能夠嘲笑控制器,以便能夠得到我的測試運行 - 否則我得到第一個Controller.ModelState沒有對象集引用。

任何幫助將是偉大的!亂搞了一段時間後

+0

C#[不支持多繼承](http://stackoverflow.com/q/2456154/1698557),所以'Controller'只能從另一個類派生。那些其他的「類」接口?你可以改變你的類的構造函數來使用這些接口而不是'Controller'嗎? – 2014-11-25 13:40:37

+0

是的,他們是接口旁邊的一類,並沒有不幸的是我不能 - 這是問題,因爲我不能得出一個最佳或甚至工作/功能的方式來嘲笑這個問題。 – harrison 2014-11-25 13:46:50

回答

0

嗯,我使出使用位良好不利的工作圍繞使用起訂量的的內置方法:

 var _context = new Web.Controllers.Controller(*all needed services etc in here - mocked as privates in test*); 

MockContainer.RegisterInstance(_context.GetType(), _context.GetType().FullName, _context, new ContainerControlledLifetimeManager()); 

所以是的,如果有人需要,如果它是複雜與嘲弄控制器像我的很多依賴和方法,你可能會做得更好。

相關問題