在另一个类中模拟控制器和模型状态 - C#,.Net,Moq
本文关键字:状态 模型 Net Moq 另一个 模拟 控制器 | 更新日期: 2023-09-27 18:31:57
好的,在这种情况下我有一个相当困难的问题 - 我有一个类,其中包含一个需要控制器类类型的方法。我不知道如何模拟这个测试,所以如果有人可以帮助我真的很感激!
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 上得到一个无对象集引用。
任何帮助都会很棒!
在搞砸了一段时间之后,我求助于使用Moq的内置方法使用一些不利的工作:
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());
所以是的,如果有人需要嘲笑一个控制器,如果它像我一样有很多依赖项和方法,你可能最好这样做。