[英]Unit Test C# MOQ dependecy injection
我是單元測試的新手。 嘗試為遺留代碼集成單元測試。 要最小化該類的相同方法,我需要注入接口還是有其他選擇。
如果將接口注入構造函數是唯一的方法,則如何為現有代碼定義默認構造函數。 例:
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,那些地方我現在不想基於接口更改呼叫。 請指教。
您可以模擬IController接口,然后將模擬對象傳遞到構造函數中。
var mockController = new Mock<IController>();
var controller = new Controller(mockController.Object);
您還需要設置要讓模擬的FillViewBag執行的操作:
var mockController.Setup(c => c.FillViewBag).Callback(() => do something here);
Moq 快速入門中的大量信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.