public void SunnyDay()
        {
            //Arrange
            var firstPresenter  = new FirstPresenter();
            var secondPresenter = new SecondPresenter();
            var mockFirstView   = MockRepository.GenerateStub <IFirstView>();
            var mockSecondView  = MockRepository.GenerateStub <ISecondView>();
            var mockMainView    = MockRepository.GenerateStub <IMainView>();

            mockMainView.Stub(m => m.FirstView).Return(mockFirstView);
            mockMainView.Stub(m => m.SecondView).Return(mockSecondView);

            //Act
            var sut = new MainPresenter
            {
                FirstPresenter  = firstPresenter,
                SecondPresenter = secondPresenter,
                View            = mockMainView,
            };

            sut.Init();

            //Assert
            Assert.That(firstPresenter.View, Is.SameAs(mockFirstView));
            Assert.That(secondPresenter.View, Is.SameAs(mockSecondView));
            Assert.That(sut.View, Is.SameAs(mockMainView));

            mockFirstView.AssertWasCalled(x => x.Presenter  = firstPresenter);
            mockSecondView.AssertWasCalled(x => x.Presenter = secondPresenter);
            mockMainView.AssertWasCalled(x => x.Presenter   = sut);
        }
 public void Init()
 {
     if (View == null)
     {
         throw new InvalidOperationException();
     }
     View.Presenter = this;
     if (FirstPresenter == null)
     {
         throw new InvalidOperationException();
     }
     if (SecondPresenter == null)
     {
         throw new InvalidOperationException();
     }
     FirstPresenter.View = View.FirstView;
     FirstPresenter.Init();
     SecondPresenter.View = View.SecondView;
     SecondPresenter.Init();
 }