I feel so bad asking you guys for help, because you are all so
thorough and I feel I'm just interrupting your work!

All help is much apprecciated, thanks.

On Sep 10, 8:50 am, Alex McMahon <[email protected]> wrote:
> Glad you managed to make some headway. If you have any further
> problems let us know
>
> 2009/9/9 bill richards <[email protected]>:
>
>
>
>
>
> > A quick design review has found the slightly "skewed" implementation
> > detail and a modification has been made and now we have eliminated the
> > need to pass around the unity container.
>
> > On Sep 9, 4:57 pm, Alex McMahon <[email protected]> wrote:
> >> A few observations:
> >> 1. The usage pattern for Unity seems a bit odd. I wouldn't expect to
> >> see any references to unity in the majority of an application's
> >> classes. One of the main points about IoC such as Unity is that it
> >> automatically resolves dependencies so if you changed your
> >> StatusBarModule constructor to take and IRegionManager and an
> >> IEventAggregator then when unity tries to build your StatusBarModule
> >> it will automatically populate those construction parameters.
> >> 2. Similarly with the call to Resolve<IStatusBarViewPresenter> this
> >> could/should be replaced with a dependency that is populated by unity
> >> (probably in the constructor).
> >> 3. Once you replace the constructor parameters your test can get rid
> >> of the MockUnityContainer and just create MockRegionManager (and other
> >> dependencies), pass it in explicitly in the constructor (Note that
> >> during the test Unity will not be used at all) Then in the actual test
> >> you can just write
> >> regionManager.AssertWasCalled(x=>x.RegisterViewWithRegion(....)
>
> >> I must admit my knowledge of Prism and Unity is patchy, but with CAB
> >> (the precursor to Prism) this was how we worked.
>
> >> Try only having one place in your application aware of Unity, and let
> >> all the dependencies of your object graph be populated by unity. This
> >> will leave your application much less tightly bound to Unity.
>
> >> 2009/9/9 bill richards <[email protected]>:
>
> >> > Alex,
>
> >> > thanks for that, and the point is conceeded:
>
> >> > The code as posted represents the "Arrange" aspect of the AAA test,
> >> > and the remainder was not posted, because at the time of posting, it
> >> > seemed superfluous to the issue I am trying to resolve.
>
> >> > I also agree that there are quite a number of items being stubbed, but
> >> > this is due to the complexity of the framework (Prism V2).
>
> >> > This is class definition for the object under test:
>
> >> >    public class StatusBarModule
> >> >    {
> >> >        public StatusBarModule(IUnityContainer container)
> >> >        {
> >> >            Container = container;
> >> >            RegionManager = Container.Resolve<IRegionManager>();
> >> >            TheEventAggregator = Container.Resolve<IEventAggregator>
> >> > ();
> >> >        }
>
> >> >        public IUnityContainer Container { get; private set; }
> >> >        public IRegionManager RegionManager { get; private set; }
> >> >        protected IEventAggregator TheEventAggregator { get; private
> >> > set; }
>
> >> >        public void
> >> > RegisterViewsAndServicesNotLoadedThroughConfiguration() { }
>
> >> >        public void RaiseAnyPertinentEventsEtc() { }
>
> >> >        public string ConfigurationContainerName { get { return
> >> > "Status"; } }
>
> >> >        public void Initialize()
> >> >        {
> >> >            var section = (UnityConfigurationSection)
> >> > ConfigurationManager.GetSection("Unity");
> >> >            if (section != null && section.Containers
> >> > [ConfigurationContainerName] != null)
> >> >                section.Containers
> >> > [ConfigurationContainerName].Configure(Container);
>
> >> >            RegisterViewsAndServicesNotLoadedThroughConfiguration();
> >> >            RegisterViewsWithRegions();
> >> >            RaiseAnyPertinentEventsEtc();
> >> >        }
>
> >> >        public void RegisterViewsWithRegions()
> >> >        {
> >> >            RegionManager.RegisterViewWithRegion
> >> > (RegionNames.StatusBarRegion, () =>
> >> > Container.Resolve<IStatusBarViewPresenter>().View);
> >> >        }
>
> >> >    }
>
> >> > And this is the full test:
>
> >> >        [Test]
> >> >        public void
> >> > WhenInstantiated_ShouldRegisterIStatusBarViewWithRegionManager()
> >> >        {
> >> >            var unity = MockRepository.GenerateStub<IUnityContainer>
> >> > ();
> >> >            var presenter =
> >> > MockRepository.GenerateStub<IStatusBarViewPresenter>();
> >> >            var view = MockRepository.GenerateStub<IStatusBarView>();
> >> >            presenter.View = view;
>
> >> >            var eventAggregator =
> >> > MockRepository.GenerateStub<IEventAggregator>();
> >> >            var regionManager =
> >> > MockRepository.GenerateStub<IRegionManager>();
> >> >            var region = MockRepository.GenerateStub<IRegion>();
> >> >            var regionCollection =
> >> > MockRepository.GenerateMock<IRegionCollection>();
> >> >            regionCollection.Add(RegionNames.StatusBarRegion, region);
>
> >> >            regionManager.Stub(r => r.Regions).Return
> >> > (regionCollection);
>
> >> >            unity.Stub(container => container.Resolve<IEventAggregator>
> >> > ()).Return(eventAggregator);
> >> >            unity.Stub(container => container.Resolve<IRegionManager>
> >> > ()).Return(regionManager);
> >> >            unity.Stub(container =>
> >> > container.Resolve<IStatusBarViewPresenter>()).Return(presenter);
>
> >> >            new StatusBarModule(unity).Initialize(); //
> >> > RegionManager.Regions doesn't contain any regions!!
>
> >> >            unity.AssertWasCalled(container =>
> >> > container.Resolve<IEventAggregator>());
> >> >            unity.AssertWasCalled(container =>
> >> > container.Resolve<IRegionManager>());
> >> >            unity.AssertWasCalled(container =>
> >> > container.Resolve<IStatusBarViewPresenter>());
> >> >            regionManager.AssertWasCalled(manager =>
> >> > manager.RegisterViewWithRegion(RegionNames.StatusBarRegion, () =>
> >> > presenter.View));
> >> >        }
>
> >> > As you can see, the actual line fo code that I am testing is
>
> >> >            RegionManager.RegisterViewWithRegion
> >> > (RegionNames.StatusBarRegion, () =>
> >> > Container.Resolve<IStatusBarViewPresenter>().View);
>
> >> > Though now having described the whole scenario, I'm thinking that
> >> > really, what I am testing is whether or not the
> >> > "RegisterViewsWithRegions()" member is called; however without
> >> > stubbing the other required operands I cannot see how I would go about
> >> > defining that test.- Hide quoted text -
>
> >> - Show quoted text -- Hide quoted text -
>
> - Show quoted text -
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Rhino.Mocks" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/rhinomocks?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to