簡體   English   中英

具有屬性注入的MVC3單元測試控制器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM