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 -
> >
>

--~--~---------~--~----~------------~-------~--~----~
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