From: <fli...@us...> - 2008-09-25 23:18:22
|
Revision: 156 http://structuremap.svn.sourceforge.net/structuremap/?rev=156&view=rev Author: flimflan Date: 2008-09-25 23:18:11 +0000 (Thu, 25 Sep 2008) Log Message: ----------- Added support for automatically creating mocks that are compatible with the Rhino.Mocks AAA style of tests. Modified Paths: -------------- trunk/Source/StructureMap.AutoMocking/RhinoAutoMocker.cs trunk/Source/StructureMap.AutoMocking/RhinoMocksServiceLocator.cs trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs Property Changed: ---------------- trunk/Source/StructureMap.AutoMocking/ Property changes on: trunk/Source/StructureMap.AutoMocking ___________________________________________________________________ Modified: svn:ignore - bin obj + bin obj [Bb]in [Dd]ebug [Rr]elease *.user *.aps *.eto Modified: trunk/Source/StructureMap.AutoMocking/RhinoAutoMocker.cs =================================================================== --- trunk/Source/StructureMap.AutoMocking/RhinoAutoMocker.cs 2008-09-25 17:38:24 UTC (rev 155) +++ trunk/Source/StructureMap.AutoMocking/RhinoAutoMocker.cs 2008-09-25 23:18:11 UTC (rev 156) @@ -11,6 +11,9 @@ public delegate void VoidMethod(); + public enum MockStyle { Dynamic, DynamicWithAAASupport } + + // Note that it subclasses the RhinoMocks.MockRepository class /// <summary> /// Provides an "Auto Mocking Container" for the concrete class TARGETCLASS /// </summary> @@ -20,10 +23,23 @@ private readonly AutoMockedContainer _container; private TARGETCLASS _classUnderTest; - public RhinoAutoMocker() + public RhinoAutoMocker() : this(MockStyle.Dynamic) {} + + public RhinoAutoMocker(MockStyle mockStyle) { - var locator = new RhinoMocksServiceLocator(this); - _container = new AutoMockedContainer(locator); + ServiceLocator serviceLocator; + switch (mockStyle) + { + case MockStyle.DynamicWithAAASupport: + serviceLocator = new RhinoMocksAAAServiceLocator(this); + break; + case MockStyle.Dynamic: + serviceLocator = new RhinoMocksServiceLocator(this); + break; + default: + throw new InvalidOperationException("Unsupported MockStyle " + mockStyle); + } + _container = new AutoMockedContainer(serviceLocator); } Modified: trunk/Source/StructureMap.AutoMocking/RhinoMocksServiceLocator.cs =================================================================== --- trunk/Source/StructureMap.AutoMocking/RhinoMocksServiceLocator.cs 2008-09-25 17:38:24 UTC (rev 155) +++ trunk/Source/StructureMap.AutoMocking/RhinoMocksServiceLocator.cs 2008-09-25 23:18:11 UTC (rev 156) @@ -31,4 +31,36 @@ #endregion } + + public class RhinoMocksAAAServiceLocator : ServiceLocator + { + private readonly MockRepository _mocks; + + public RhinoMocksAAAServiceLocator(MockRepository mocks) + { + _mocks = mocks; + } + + + public RhinoMocksAAAServiceLocator() + : this(new MockRepository()) + { + } + + #region ServiceLocator Members + + public T Service<T>() + { + return MockRepository.GenerateMock<T>(); + } + + public object Service(Type serviceType) + { + var mock = _mocks.DynamicMock(serviceType); + _mocks.Replay(mock); + return mock; + } + + #endregion + } } \ No newline at end of file Modified: trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs 2008-09-25 17:38:24 UTC (rev 155) +++ trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs 2008-09-25 23:18:11 UTC (rev 156) @@ -85,6 +85,11 @@ { get { return _service3; } } + + public void CallService() + { + _service.Go(); + } } public interface IMockedService @@ -326,5 +331,16 @@ Assert.AreEqual("Max", concreteClass.Name); } + + [Test] + public void TheAutoMockerOptionallyPushesInMocksInReplayModeToAllowForAAAsyntax() + { + var autoMocker = new RhinoAutoMocker<ConcreteClass>(MockStyle.DynamicWithAAASupport); + + autoMocker.ClassUnderTest.CallService(); + + autoMocker.Get<IMockedService>().AssertWasCalled(s => s.Go()); + } + } } \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |