From: <jer...@us...> - 2008-02-09 16:11:00
|
Revision: 63 http://structuremap.svn.sourceforge.net/structuremap/?rev=63&view=rev Author: jeremydmiller Date: 2008-02-09 08:10:55 -0800 (Sat, 09 Feb 2008) Log Message: ----------- spiffing up the automocking container stuff Modified Paths: -------------- trunk/Source/StructureMap/Configuration/NormalGraphBuilder.cs trunk/Source/StructureMap/Graph/PluginGraph.cs trunk/Source/StructureMap.AutoMocking/AutoMockedInstanceManager.cs trunk/Source/StructureMap.AutoMocking/RhinoAutoMocker.cs trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs Modified: trunk/Source/StructureMap/Configuration/NormalGraphBuilder.cs =================================================================== --- trunk/Source/StructureMap/Configuration/NormalGraphBuilder.cs 2008-01-29 02:02:34 UTC (rev 62) +++ trunk/Source/StructureMap/Configuration/NormalGraphBuilder.cs 2008-02-09 16:10:55 UTC (rev 63) @@ -32,7 +32,7 @@ registry.ConfigurePluginGraph(_pluginGraph); } - _systemGraph = new PluginGraph(); + _systemGraph = new PluginGraph(false); _systemGraph.Assemblies.Add(Assembly.GetExecutingAssembly()); } Modified: trunk/Source/StructureMap/Graph/PluginGraph.cs =================================================================== --- trunk/Source/StructureMap/Graph/PluginGraph.cs 2008-01-29 02:02:34 UTC (rev 62) +++ trunk/Source/StructureMap/Graph/PluginGraph.cs 2008-02-09 16:10:55 UTC (rev 63) @@ -20,8 +20,8 @@ private readonly InterceptorLibrary _interceptorLibrary = new InterceptorLibrary(); private readonly PluginFamilyCollection _pluginFamilies; private bool _sealed = false; + private bool _useExternalRegistries = true; - /// <summary> /// Default constructor /// </summary> @@ -32,6 +32,11 @@ } + public PluginGraph(bool useExternalRegistries) : this() + { + _useExternalRegistries = useExternalRegistries; + } + public AssemblyGraphCollection Assemblies { get { return _assemblies; } @@ -70,7 +75,10 @@ return; } - searchAssembliesForRegistries(); + if (_useExternalRegistries) + { + searchAssembliesForRegistries(); + } foreach (AssemblyGraph assembly in _assemblies) { Modified: trunk/Source/StructureMap.AutoMocking/AutoMockedInstanceManager.cs =================================================================== --- trunk/Source/StructureMap.AutoMocking/AutoMockedInstanceManager.cs 2008-01-29 02:02:34 UTC (rev 62) +++ trunk/Source/StructureMap.AutoMocking/AutoMockedInstanceManager.cs 2008-02-09 16:10:55 UTC (rev 63) @@ -1,4 +1,5 @@ using System; +using StructureMap.Graph; namespace StructureMap.AutoMocking { Modified: trunk/Source/StructureMap.AutoMocking/RhinoAutoMocker.cs =================================================================== --- trunk/Source/StructureMap.AutoMocking/RhinoAutoMocker.cs 2008-01-29 02:02:34 UTC (rev 62) +++ trunk/Source/StructureMap.AutoMocking/RhinoAutoMocker.cs 2008-02-09 16:10:55 UTC (rev 63) @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Reflection; using Rhino.Mocks; +using StructureMap.Configuration.Mementos; using StructureMap.Graph; namespace StructureMap.AutoMocking @@ -10,10 +11,11 @@ public delegate void VoidMethod(); - + // Note that it subclasses the RhinoMocks.MockRepository class public class RhinoAutoMocker<TARGETCLASS> : MockRepository where TARGETCLASS : class { private readonly AutoMockedInstanceManager _manager; + private TARGETCLASS _classUnderTest; public RhinoAutoMocker() { @@ -21,19 +23,34 @@ _manager = new AutoMockedInstanceManager(locator); } + // Replaces the inner InstanceManager in ObjectFactory with the mocked + // InstanceManager from the auto mocking container. This will make ObjectFactory + // return mocks for everything. Use cautiously!!!!!!!!!!!!!!! public void MockObjectFactory() { ObjectFactory.ReplaceManager(_manager); } - public TARGETCLASS Create() + // Gets the ClassUnderTest with mock objects (or stubs) pushed in + // for all of its dependencies + public TARGETCLASS ClassUnderTest { - return _manager.FillDependencies<TARGETCLASS>(); + get + { + if (_classUnderTest == null) + { + _classUnderTest = _manager.FillDependencies<TARGETCLASS>(); + } + + return _classUnderTest; + } } - public TARGETCLASS CreatePartialMocked() + // I find it useful from time to time to use partial mocks for the ClassUnderTest + // Especially in Presenter testing + public void PartialMockTheClassUnderTest() { - return PartialMock<TARGETCLASS>(getConstructorArgs()); + _classUnderTest = PartialMock<TARGETCLASS>(getConstructorArgs()); } private object[] getConstructorArgs() @@ -50,14 +67,20 @@ return list.ToArray(); } - public T Service<T>() + // Get one of the mock objects that are injected into the constructor function + // of the ClassUnderTest + public T Get<T>() { return _manager.CreateInstance<T>(); } + // Set the auto mocking container to use a Stub for Type T public void InjectStub<T>(T stub) { _manager.InjectStub<T>(stub); } } + + + } \ No newline at end of file Modified: trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs 2008-01-29 02:02:34 UTC (rev 62) +++ trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs 2008-02-09 16:10:55 UTC (rev 63) @@ -157,10 +157,10 @@ StubService stub = new StubService(); autoMocker.InjectStub<IMockedService>(stub); - IMockedService2 service2 = autoMocker.Service<IMockedService2>(); - IMockedService3 service3 = autoMocker.Service<IMockedService3>(); + IMockedService2 service2 = autoMocker.Get<IMockedService2>(); + IMockedService3 service3 = autoMocker.Get<IMockedService3>(); - ConcreteClass concreteClass = autoMocker.Create(); + ConcreteClass concreteClass = autoMocker.ClassUnderTest; Assert.AreSame(stub, concreteClass.Service); Assert.AreSame(service2, concreteClass.Service2); @@ -172,11 +172,12 @@ { RhinoAutoMocker<ConcreteClass> autoMocker = new RhinoAutoMocker<ConcreteClass>(); - IMockedService service = autoMocker.Service<IMockedService>(); - IMockedService2 service2 = autoMocker.Service<IMockedService2>(); - IMockedService3 service3 = autoMocker.Service<IMockedService3>(); + IMockedService service = autoMocker.Get<IMockedService>(); + IMockedService2 service2 = autoMocker.Get<IMockedService2>(); + IMockedService3 service3 = autoMocker.Get<IMockedService3>(); - ConcreteClass concreteClass = autoMocker.CreatePartialMocked(); + autoMocker.PartialMockTheClassUnderTest(); + ConcreteClass concreteClass = autoMocker.ClassUnderTest; Assert.AreSame(service, concreteClass.Service); Assert.AreSame(service2, concreteClass.Service2); @@ -190,18 +191,30 @@ using (autoMocker.Record()) { - Expect.Call(autoMocker.Service<IMockedService>().Name).Return("Jeremy"); + Expect.Call(autoMocker.Get<IMockedService>().Name).Return("Jeremy"); } - Assert.AreEqual("Jeremy", autoMocker.Create().Name); + Assert.AreEqual("Jeremy", autoMocker.ClassUnderTest.Name); } [Test] + public void GetTheSameConcreteClassTwiceFromCreate() + { + RhinoAutoMocker<ConcreteClass> autoMocker = new RhinoAutoMocker<ConcreteClass>(); + ConcreteClass concreteClass = autoMocker.ClassUnderTest; + + Assert.AreSame(concreteClass, autoMocker.ClassUnderTest); + Assert.AreSame(concreteClass, autoMocker.ClassUnderTest); + Assert.AreSame(concreteClass, autoMocker.ClassUnderTest); + } + + [Test] public void UseTheAutoMockerToStartUpTheConcreteClassAsAPartialMockAndSetTheNameMethodUp() { RhinoAutoMocker<ConcreteClass> autoMocker = new RhinoAutoMocker<ConcreteClass>(); - ConcreteClass concreteClass = autoMocker.CreatePartialMocked(); + autoMocker.PartialMockTheClassUnderTest(); + ConcreteClass concreteClass = autoMocker.ClassUnderTest; using (autoMocker.Record()) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |