单元测试C#MOQ依赖注入

单元测试C#MOQ依赖注入,c#,unit-testing,moq,C#,Unit Testing,Moq,我不熟悉单元测试。尝试为遗留代码集成单元测试。 若要moq类的相同方法,我需要注入接口还是有其他选项 如果向构造函数注入接口是唯一的方法,那么如何为现有代码定义默认构造函数。 例如: private IController _iController; public Controller(IController iController) { _iController= iController; } public ActionResult

我不熟悉单元测试。尝试为遗留代码集成单元测试。 若要moq类的相同方法,我需要注入接口还是有其他选项

如果向构造函数注入接口是唯一的方法,那么如何为现有代码定义默认构造函数。 例如:

    private IController _iController;
    public Controller(IController iController)
    {
        _iController= iController;

    } 
    public ActionResult ActualMethod()
    { 
        _iController.FillViewBag(); 
        return View();
    }
    public void UnitTest()
    {
       var i = new Mock<IController>();
        i.Setup(d => d.FillViewBag());
        var controller = new Controller(i.Object); 
        controller.ActualMethod();
    }
专用IController\u IController;
公共控制器(IController IController)
{
_i控制器=i控制器;
} 
公共行动结果实际方法()
{ 
_i控制器。FillViewBag();
返回视图();
}
公共空单元测试()
{
var i=新模拟();
i、 设置(d=>d.FillViewBag());
var控制器=新控制器(即对象);
controller.ActualMethod();
}
对于上面的代码,我能够执行单元测试。 但是,如果我浏览该方法(手动测试该操作),它将失败,因为没有设置object ref。因为对象是空的。如何解决这个问题


此外,我在许多地方使用FillViewBag,这些地方我现在不想更改基于接口的调用。请告知

模拟IController接口,然后将模拟对象传递给构造函数

var mockController = new Mock<IController>();

var controller = new Controller(mockController.Object);

Moq中有大量关于此的信息

非常感谢您的回复。我在问题中已经提到了同样的内容。我没有嘲笑的问题。但在应用程序中,我使用函数调用作为_interface.FillViewBag(),它给出了对象引用未设置错误。(如果我运行项目-而不是单元测试)。基本上,我将通过传递模拟接口从单元测试调用控制器类。这很好用。如果我想调用控制器类方法,应该做什么。请告知!!我就是这样嘲笑的。但问题是,我的菜单路由到ProductController/List。调用此函数时失败,因为构造函数参数无效。那么,我是否需要提供没有任何参数的附加默认构造函数?如果我这样做,我会得到对象引用错误。请告知
var mockController.Setup(c => c.FillViewBag).Callback(() => do something here);