如何模拟这个MVC控制器

本文关键字:MVC 控制器 模拟 何模拟 | 更新日期: 2023-09-27 18:16:22

我正在使用Fluent MVC来测试我的一些MVC控制器(有些人认为这是不需要的,但这更多的是一个学习过程,而不是生产产品)。

界面

public interface ISettings<T> where T : BaseSettingsDto
{
    T GetSettings();
    bool SaveSettings(T model);
}

实现接口

public class GetSettingsConfiguration : ISettings<FirstSettingsDto>
{
    public FirstSettingsDto GetSettings()
    {
        var repo = new Repository();
        var result = repo.GetAll();
        // Do stuff
        return model;
    }
    public bool SaveSettings(FirstSettingsDto model)
    {
        var repo = new Repository();
        // Do stuff
    }
}

我如何在我的控制器中使用这个(示例):

[HttpGet]
public ActionResult GetInformation()
{
    var admin = new GetSettingsConfiguration();
    var config = admin.GetSettings();
}

既然接口使用了泛型,我该如何模拟它呢?

如何模拟这个MVC控制器

您可以将设置保存为控制器类字段,并从构造函数参数中初始化。

public Controller
{
  private ISettings<FirstSettingsDto> _admin;
  public Controller(ISettings<FirstSettingsDto> admin = null)
  {
    _admin = admin ?? new GetSettingsConfiguration();
  }
  [HttpGet]
  public ActionResult GetInformation()
  {
      var config = _admin.GetSettings();
  }
}

现在你可以用设置模拟创建控制器。

UPDATE:设置ctor参数的默认值(thx @JB06)