[英]MVC3 Unit Test Controller with Property Injection
我有一個使用屬性注入的MVC3項目。 在我的控制器中,我調用了一個服務類。 正如我提到的,它使用屬性注入(帶有unity )而不是通過構造函數來解決。 我四處搜尋,試圖找到一個可以解決控制器內這些依賴關系的單元測試示例,但似乎所有內容都涉及構造器DI。 我感到沮喪。 任何幫助都會很棒。
控制器示例:
[Dependency]
public ITrainingService trainingService { get; set; }
public ActionResult Index(MyTrainingView myTrainingView)
{
//Load all training items into view object
myTrainingView.training = trainingService.getTraining(myTrainingView.trainingId);
myTrainingView.videos = trainingService.getTrainingVideos(myTrainingView.trainingId);
myTrainingView.visuals = trainingService.getTrainingVisuals(myTrainingView.trainingId);
myTrainingView.exams = trainingService.getTrainingExams(myTrainingView.trainingId);
return View(myTrainingView);
}
我正在嘗試運行單元測試時解決trainingService。 我發現了無數使用構造函數依賴項來模擬和解析依賴項的示例,但在屬性注入方面卻一無所獲。
您不需要在單元測試中依靠統一性。
這樣的事情可以解決問題:
[Test]
public void GetTrainingById()
{
var mockService = MockRepository.GenerateMock<ITrainingService>();
mockService.Stub(service => service.getTraining(123)).Return(new ImaginaryClass());
var sut = new TrainingController();
sut.trainingService = mockService;
var myTrainingView = new MyTrainingView();
sut.Index(myTrainingView);
Assert.AreEqual(expected, myTrainingView.training);
}
如果必須在單元測試中使用unity,則UnityContainer
在測試中實例化UnityContainer
並使用RegisterInstance
注冊要注入的對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.