单元测试C#MOQ依赖注入

时间:2017-08-14 11:52:28

标签: c# unit-testing moq

我是单元测试的新手。尝试集成遗留代码的单元测试。 为了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();
    }

对于上面的代码,我可以执行单元测试。 但是,如果我浏览方法(手动测试操作),则无法设置对象引用失败。因为对象是空的。如何解决这个问题?

我也在许多地方使用FillViewBag,那些我不想基于接口改变呼叫的地方。请指教。

1 个答案:

答案 0 :(得分:2)

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

var mockController = new Mock<IController>();

var controller = new Controller(mockController.Object);

您还需要设置您希望模拟的FillViewBag执行的操作:

var mockController.Setup(c => c.FillViewBag).Callback(() => do something here);

在Moq Quickstart

中有大量信息