在另一个类中模拟控制器和模型状态 - 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 上得到一个无对象集引用。

任何帮助都会很棒!

在另一个类中模拟控制器和模型状态 - C#,.Net,Moq

在搞砸了一段时间之后,我求助于使用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());

所以是的,如果有人需要嘲笑一个控制器,如果它像我一样有很多依赖项和方法,你可能最好这样做。