我是单元测试的新手。尝试集成遗留代码的单元测试。 为了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,那些我不想基于接口改变呼叫的地方。请指教。
答案 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
中有大量信息