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 に答える