1

我有一个使用属性注入的 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 问题。我发现了无数使用构造函数依赖项来模拟和解决依赖项的示例,但在属性注入方面却一无所获。

4

1 回答 1

1

您不需要在单元测试中依赖统一性。

像这样的东西可以解决问题:

    [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在测试中实例化 并使用RegisterInstance来注册要注入的对象。

于 2013-03-06T18:18:50.793 回答