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