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