|
From: <jer...@us...> - 2007-12-30 16:31:13
|
Revision: 51
http://structuremap.svn.sourceforge.net/structuremap/?rev=51&view=rev
Author: jeremydmiller
Date: 2007-12-30 08:31:10 -0800 (Sun, 30 Dec 2007)
Log Message:
-----------
updating RhinoMocks, the first cut at automocking, some clean up
Modified Paths:
--------------
trunk/Source/StructureMap/Configuration/ConfigurationParser.cs
trunk/Source/StructureMap/Configuration/DSL/ConstructorExpression.cs
trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs
trunk/Source/StructureMap/Configuration/DSL/InstanceExpression.cs
trunk/Source/StructureMap/Configuration/DSL/ReferenceMementoBuilder.cs
trunk/Source/StructureMap/Configuration/DSL/Registry.cs
trunk/Source/StructureMap/Configuration/FamilyParser.cs
trunk/Source/StructureMap/ConstructorMemento.cs
trunk/Source/StructureMap/Delegates.cs
trunk/Source/StructureMap/DeploymentTasks/DeploymentExecutor.cs
trunk/Source/StructureMap/Graph/Plugin.cs
trunk/Source/StructureMap/Graph/PluginFamily.cs
trunk/Source/StructureMap/InstanceBuilder.cs
trunk/Source/StructureMap/InstanceFactory.cs
trunk/Source/StructureMap/InstanceManager.cs
trunk/Source/StructureMap/InstanceMemento.cs
trunk/Source/StructureMap/MemoryInstanceMemento.cs
trunk/Source/StructureMap/StructureMapConfiguration.cs
trunk/Source/StructureMap.AutoMocking/AutoMockedInstanceManager.cs
trunk/Source/StructureMap.AutoMocking/RhinoAutoMocker.cs
trunk/Source/StructureMap.AutoMocking/StructureMap.AutoMocking.csproj
trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs
trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj
trunk/bin/Rhino.Mocks.dll
Added Paths:
-----------
trunk/Source/StructureMap.AutoMocking/RhinoMocksServiceLocator.cs
trunk/Source/StructureMap.AutoMocking/ServiceLocator.cs
trunk/Source/StructureMap.Testing/NewFolder1/
Removed Paths:
-------------
trunk/Source/StructureMap.Testing.GenericWidgets/bin/
Property Changed:
----------------
trunk/Source/StructureMap.Testing/
Modified: trunk/Source/StructureMap/Configuration/ConfigurationParser.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/ConfigurationParser.cs 2007-12-22 17:45:18 UTC (rev 50)
+++ trunk/Source/StructureMap/Configuration/ConfigurationParser.cs 2007-12-30 16:31:10 UTC (rev 51)
@@ -167,7 +167,7 @@
public void ParseFamilies(IGraphBuilder builder)
{
FamilyParser familyParser = new FamilyParser(builder, _mementoCreator);
-
+
XmlNodeList familyNodes = findNodes(XmlConstants.PLUGIN_FAMILY_NODE);
foreach (XmlElement familyElement in familyNodes)
{
@@ -185,7 +185,6 @@
{
familyParser.ParseInstanceElement(element);
}
-
}
Modified: trunk/Source/StructureMap/Configuration/DSL/ConstructorExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/ConstructorExpression.cs 2007-12-22 17:45:18 UTC (rev 50)
+++ trunk/Source/StructureMap/Configuration/DSL/ConstructorExpression.cs 2007-12-30 16:31:10 UTC (rev 51)
@@ -39,7 +39,7 @@
public override void ValidatePluggability(Type pluginType)
{
- if (!pluginType.Equals(typeof(PLUGINTYPE)))
+ if (!pluginType.Equals(typeof (PLUGINTYPE)))
{
throw new StructureMapException(306,
typeof (PLUGINTYPE).FullName, pluginType.FullName);
Modified: trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs 2007-12-22 17:45:18 UTC (rev 50)
+++ trunk/Source/StructureMap/Configuration/DSL/CreatePluginFamilyExpression.cs 2007-12-30 16:31:10 UTC (rev 51)
@@ -20,7 +20,7 @@
public CreatePluginFamilyExpression()
{
- _pluginType = typeof(PLUGINTYPE);
+ _pluginType = typeof (PLUGINTYPE);
}
void IExpression.Configure(PluginGraph graph)
@@ -70,7 +70,7 @@
builder.ValidatePluggability(_pluginType);
_children.Add(builder);
- _alterations.Add(delegate (PluginFamily family)
+ _alterations.Add(delegate(PluginFamily family)
{
InstanceMemento memento = builder.BuildMemento(family);
family.Source.AddExternalMemento(memento);
@@ -86,7 +86,8 @@
/// </summary>
/// <typeparam name="CONCRETETYPE"></typeparam>
/// <returns></returns>
- public CreatePluginFamilyExpression<PLUGINTYPE> TheDefaultIsConcreteType<CONCRETETYPE>() where CONCRETETYPE : PLUGINTYPE
+ public CreatePluginFamilyExpression<PLUGINTYPE> TheDefaultIsConcreteType<CONCRETETYPE>()
+ where CONCRETETYPE : PLUGINTYPE
{
ExpressionValidator.ValidatePluggabilityOf(typeof (CONCRETETYPE)).IntoPluginType(_pluginType);
@@ -130,20 +131,16 @@
public CreatePluginFamilyExpression<PLUGINTYPE> OnCreation(StartupHandler<PLUGINTYPE> handler)
{
- _alterations.Add(delegate (PluginFamily family)
- {
- family.InstanceInterceptor = new StartupInterceptor<PLUGINTYPE>(handler);
- });
+ _alterations.Add(
+ delegate(PluginFamily family) { family.InstanceInterceptor = new StartupInterceptor<PLUGINTYPE>(handler); });
return this;
}
public CreatePluginFamilyExpression<PLUGINTYPE> EnrichWith(EnrichmentHandler<PLUGINTYPE> handler)
{
- _alterations.Add(delegate(PluginFamily family)
- {
- family.InstanceInterceptor = new EnrichmentInterceptor<PLUGINTYPE>(handler);
- });
+ _alterations.Add(
+ delegate(PluginFamily family) { family.InstanceInterceptor = new EnrichmentInterceptor<PLUGINTYPE>(handler); });
return this;
}
Modified: trunk/Source/StructureMap/Configuration/DSL/InstanceExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/InstanceExpression.cs 2007-12-22 17:45:18 UTC (rev 50)
+++ trunk/Source/StructureMap/Configuration/DSL/InstanceExpression.cs 2007-12-30 16:31:10 UTC (rev 51)
@@ -102,10 +102,10 @@
{
Plugin plugin = Plugin.CreateImplicitPlugin(_pluggedType);
string propertyName = plugin.FindFirstConstructorArgumentOfType<T>();
-
+
if (string.IsNullOrEmpty(propertyName))
{
- throw new StructureMapException(305, TypePath.GetAssemblyQualifiedName(typeof(T)));
+ throw new StructureMapException(305, TypePath.GetAssemblyQualifiedName(typeof (T)));
}
return propertyName;
@@ -173,7 +173,8 @@
{
validateTypeIsArray<PLUGINTYPE>();
- ChildArrayExpression<PLUGINTYPE> expression = new ChildArrayExpression<PLUGINTYPE>(this, _memento, propertyName);
+ ChildArrayExpression<PLUGINTYPE> expression =
+ new ChildArrayExpression<PLUGINTYPE>(this, _memento, propertyName);
addChildExpression(expression);
return expression;
@@ -181,12 +182,10 @@
private static void validateTypeIsArray<PLUGINTYPE>()
{
- if (!typeof(PLUGINTYPE).IsArray)
+ if (!typeof (PLUGINTYPE).IsArray)
{
throw new StructureMapException(307);
}
}
-
-
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Configuration/DSL/ReferenceMementoBuilder.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/ReferenceMementoBuilder.cs 2007-12-22 17:45:18 UTC (rev 50)
+++ trunk/Source/StructureMap/Configuration/DSL/ReferenceMementoBuilder.cs 2007-12-30 16:31:10 UTC (rev 51)
@@ -24,12 +24,10 @@
void IMementoBuilder.SetInstanceName(string instanceKey)
{
-
}
void IMementoBuilder.ValidatePluggability(Type pluginType)
{
-
}
Modified: trunk/Source/StructureMap/Configuration/DSL/Registry.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2007-12-22 17:45:18 UTC (rev 50)
+++ trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2007-12-30 16:31:10 UTC (rev 51)
@@ -75,7 +75,7 @@
CreatePluginFamilyExpression<PLUGINTYPE> expression = new CreatePluginFamilyExpression<PLUGINTYPE>();
addExpression(expression);
- return expression;
+ return expression;
}
public IInstanceManager BuildInstanceManager()
@@ -97,7 +97,6 @@
return expression.TypeExpression();
}
-
/// <summary>
/// Convenience method to start the definition of an instance of type T
@@ -223,6 +222,5 @@
{
return new ReferenceMementoBuilder(referencedKey);
}
-
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Configuration/FamilyParser.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/FamilyParser.cs 2007-12-22 17:45:18 UTC (rev 50)
+++ trunk/Source/StructureMap/Configuration/FamilyParser.cs 2007-12-30 16:31:10 UTC (rev 51)
@@ -117,8 +117,5 @@
_builder.AddInterceptor(pluginTypePath, interceptorMemento);
}
}
-
-
-
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/ConstructorMemento.cs
===================================================================
--- trunk/Source/StructureMap/ConstructorMemento.cs 2007-12-22 17:45:18 UTC (rev 50)
+++ trunk/Source/StructureMap/ConstructorMemento.cs 2007-12-30 16:31:10 UTC (rev 51)
@@ -22,7 +22,6 @@
public ConstructorMemento(BuildObjectDelegate<PLUGINTYPE> builder)
: this(Guid.NewGuid().ToString(), builder)
{
-
}
protected override object buildInstance(IInstanceCreator creator)
@@ -37,4 +36,4 @@
set { _builder = value; }
}
}
-}
+}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Delegates.cs
===================================================================
--- trunk/Source/StructureMap/Delegates.cs 2007-12-22 17:45:18 UTC (rev 50)
+++ trunk/Source/StructureMap/Delegates.cs 2007-12-30 16:31:10 UTC (rev 51)
@@ -1,6 +1,7 @@
namespace StructureMap
{
public delegate T EnrichmentHandler<T>(T target);
+
public delegate void StartupHandler<T>(T target);
public interface InstanceInterceptor
@@ -48,4 +49,4 @@
return _handler((T) target);
}
}
-}
+}
\ No newline at end of file
Modified: trunk/Source/StructureMap/DeploymentTasks/DeploymentExecutor.cs
===================================================================
--- trunk/Source/StructureMap/DeploymentTasks/DeploymentExecutor.cs 2007-12-22 17:45:18 UTC (rev 50)
+++ trunk/Source/StructureMap/DeploymentTasks/DeploymentExecutor.cs 2007-12-30 16:31:10 UTC (rev 51)
@@ -65,7 +65,8 @@
_sourceConfigDocument = new XmlDocument();
_sourceConfigDocument.Load(configPath);
- PluginGraphBuilder builder = new PluginGraphBuilder(new ConfigurationParser(_sourceConfigDocument.DocumentElement));
+ PluginGraphBuilder builder =
+ new PluginGraphBuilder(new ConfigurationParser(_sourceConfigDocument.DocumentElement));
_report = createPluginGraphReport(builder);
_defaultManager = builder.DefaultManager;
Modified: trunk/Source/StructureMap/Graph/Plugin.cs
===================================================================
--- trunk/Source/StructureMap/Graph/Plugin.cs 2007-12-22 17:45:18 UTC (rev 50)
+++ trunk/Source/StructureMap/Graph/Plugin.cs 2007-12-30 16:31:10 UTC (rev 51)
@@ -16,7 +16,7 @@
public static Plugin CreateAutofilledPlugin(Type concreteType)
{
string pluginKey = Guid.NewGuid().ToString();
- Plugin plugin = Plugin.CreateExplicitPlugin(concreteType, pluginKey, string.Empty);
+ Plugin plugin = CreateExplicitPlugin(concreteType, pluginKey, string.Empty);
if (!plugin.CanBeAutoFilled)
{
throw new StructureMapException(231);
@@ -140,6 +140,25 @@
return new Plugin(pluggedType, concreteKey, DefinitionSource.Explicit);
}
+ public static ConstructorInfo GetGreediestConstructor(Type pluggedType)
+ {
+ ConstructorInfo returnValue = null;
+
+ foreach (ConstructorInfo constructor in pluggedType.GetConstructors())
+ {
+ if (returnValue == null)
+ {
+ returnValue = constructor;
+ }
+ else if (constructor.GetParameters().Length > returnValue.GetParameters().Length)
+ {
+ returnValue = constructor;
+ }
+ }
+
+ return returnValue;
+ }
+
#endregion
private Type _pluggedType;
@@ -231,17 +250,7 @@
// if no constructor is marked as the "ContainerConstructor", find the greediest constructor
if (returnValue == null)
{
- foreach (ConstructorInfo constructor in _pluggedType.GetConstructors())
- {
- if (returnValue == null)
- {
- returnValue = constructor;
- }
- else if (constructor.GetParameters().Length > returnValue.GetParameters().Length)
- {
- returnValue = constructor;
- }
- }
+ returnValue = GetGreediestConstructor(_pluggedType);
}
if (returnValue == null)
@@ -252,6 +261,8 @@
return returnValue;
}
+
+
/// <summary>
/// The ConcreteKey that identifies the Plugin within a PluginFamily
/// </summary>
Modified: trunk/Source/StructureMap/Graph/PluginFamily.cs
===================================================================
--- trunk/Source/StructureMap/Graph/PluginFamily.cs 2007-12-22 17:45:18 UTC (rev 50)
+++ trunk/Source/StructureMap/Graph/PluginFamily.cs 2007-12-30 16:31:10 UTC (rev 51)
@@ -1,5 +1,4 @@
using System;
-using System.Reflection;
using StructureMap.Interceptors;
using StructureMap.Source;
@@ -160,17 +159,17 @@
}
Type[] pluginArgs = _pluginType.GetGenericArguments();
Type[] pluggableArgs = interfaceType.GetGenericArguments();
-
+
if (templateTypes.Length != pluginArgs.Length &&
pluginArgs.Length != pluggableArgs.Length)
{
return false;
}
-
+
for (int i = 0; i < templateTypes.Length; i++)
{
isValid &= templateTypes[i] == pluggableArgs[i] ||
- pluginArgs[i].IsGenericParameter &&
+ pluginArgs[i].IsGenericParameter &&
pluggableArgs[i].IsGenericParameter;
}
return isValid;
Modified: trunk/Source/StructureMap/InstanceBuilder.cs
===================================================================
--- trunk/Source/StructureMap/InstanceBuilder.cs 2007-12-22 17:45:18 UTC (rev 50)
+++ trunk/Source/StructureMap/InstanceBuilder.cs 2007-12-30 16:31:10 UTC (rev 51)
@@ -1,5 +1,4 @@
using System;
-using StructureMap.Graph;
namespace StructureMap
{
@@ -35,5 +34,10 @@
Type plugged = Type.GetType(PluggedType);
return plugged.Equals(type);
}
+
+ //public Type GetPluggedType()
+ //{
+ // return Type.GetType(PluggedType);
+ //}
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/InstanceFactory.cs
===================================================================
--- trunk/Source/StructureMap/InstanceFactory.cs 2007-12-22 17:45:18 UTC (rev 50)
+++ trunk/Source/StructureMap/InstanceFactory.cs 2007-12-30 16:31:10 UTC (rev 51)
@@ -21,6 +21,7 @@
private InstanceInterceptor _interceptor = new NulloInterceptor();
#region static constructors
+
public static InstanceFactory CreateFactoryWithDefault(Type pluginType, object defaultInstance)
{
PluginFamily family = new PluginFamily(pluginType);
@@ -29,9 +30,9 @@
return factory;
}
+
#endregion
-
#region constructor functions
private InstanceFactory()
@@ -363,7 +364,7 @@
}
Plugin plugin = Plugin.CreateImplicitPlugin(typeof (T));
- processPlugins(new Plugin[]{plugin});
+ processPlugins(new Plugin[] {plugin});
plugin.AddToSource(_source);
return plugin.CreateImplicitMemento();
Modified: trunk/Source/StructureMap/InstanceManager.cs
===================================================================
--- trunk/Source/StructureMap/InstanceManager.cs 2007-12-22 17:45:18 UTC (rev 50)
+++ trunk/Source/StructureMap/InstanceManager.cs 2007-12-30 16:31:10 UTC (rev 51)
@@ -422,7 +422,7 @@
public void AddInstance<PLUGINTYPE, CONCRETETYPE>()
{
- IInstanceFactory factory = getOrCreateFactory(typeof(PLUGINTYPE), createFactory);
+ IInstanceFactory factory = getOrCreateFactory(typeof (PLUGINTYPE), createFactory);
InstanceMemento memento = factory.AddType<CONCRETETYPE>();
factory.AddInstance(memento);
}
Modified: trunk/Source/StructureMap/InstanceMemento.cs
===================================================================
--- trunk/Source/StructureMap/InstanceMemento.cs 2007-12-22 17:45:18 UTC (rev 50)
+++ trunk/Source/StructureMap/InstanceMemento.cs 2007-12-30 16:31:10 UTC (rev 51)
@@ -281,7 +281,8 @@
}
catch (Exception e)
{
- throw new StructureMapException(308, e, InstanceKey, TypePath.GetAssemblyQualifiedName(instance.GetType()));
+ throw new StructureMapException(308, e, InstanceKey,
+ TypePath.GetAssemblyQualifiedName(instance.GetType()));
}
}
Modified: trunk/Source/StructureMap/MemoryInstanceMemento.cs
===================================================================
--- trunk/Source/StructureMap/MemoryInstanceMemento.cs 2007-12-22 17:45:18 UTC (rev 50)
+++ trunk/Source/StructureMap/MemoryInstanceMemento.cs 2007-12-30 16:31:10 UTC (rev 51)
@@ -7,8 +7,9 @@
public class GenericMemento<T> : MemoryInstanceMemento
{
public GenericMemento(string instanceKey)
- : base(Plugin.CreateImplicitPlugin(typeof(T)).ConcreteKey, instanceKey)
- {}
+ : base(Plugin.CreateImplicitPlugin(typeof (T)).ConcreteKey, instanceKey)
+ {
+ }
}
/// <summary>
Modified: trunk/Source/StructureMap/StructureMapConfiguration.cs
===================================================================
--- trunk/Source/StructureMap/StructureMapConfiguration.cs 2007-12-22 17:45:18 UTC (rev 50)
+++ trunk/Source/StructureMap/StructureMapConfiguration.cs 2007-12-30 16:31:10 UTC (rev 51)
@@ -81,7 +81,7 @@
if (_pullConfigurationFromAppConfig)
{
IList<XmlNode> appConfigNodes = StructureMapConfigurationSection.GetStructureMapConfiguration();
- foreach(XmlNode appConfigNode in appConfigNodes)
+ foreach (XmlNode appConfigNode in appConfigNodes)
{
_collection.IncludeNode(
delegate() { return appConfigNode; });
Modified: trunk/Source/StructureMap.AutoMocking/AutoMockedInstanceManager.cs
===================================================================
--- trunk/Source/StructureMap.AutoMocking/AutoMockedInstanceManager.cs 2007-12-22 17:45:18 UTC (rev 50)
+++ trunk/Source/StructureMap.AutoMocking/AutoMockedInstanceManager.cs 2007-12-30 16:31:10 UTC (rev 51)
@@ -1,12 +1,9 @@
using System;
+using Rhino.Mocks;
namespace StructureMap.AutoMocking
{
- public interface ServiceLocator
- {
- T Service<T>();
- object Service(Type serviceType);
- }
+
public class AutoMockedInstanceManager : InstanceManager
{
Modified: trunk/Source/StructureMap.AutoMocking/RhinoAutoMocker.cs
===================================================================
--- trunk/Source/StructureMap.AutoMocking/RhinoAutoMocker.cs 2007-12-22 17:45:18 UTC (rev 50)
+++ trunk/Source/StructureMap.AutoMocking/RhinoAutoMocker.cs 2007-12-30 16:31:10 UTC (rev 51)
@@ -1,46 +1,61 @@
using System;
using System.Collections.Generic;
+using System.Reflection;
using Rhino.Mocks;
+using StructureMap.Graph;
namespace StructureMap.AutoMocking
{
public delegate void GenericVoidMethod<TARGETCLASS>(TARGETCLASS target);
public delegate void VoidMethod();
- public class RhinoAutoMocker : MockRepository, ServiceLocator
+
+
+
+ public class RhinoAutoMocker<TARGETCLASS> : MockRepository where TARGETCLASS : class
{
- private Dictionary<Type, object> _services;
private AutoMockedInstanceManager _manager;
public RhinoAutoMocker()
{
- _services = new Dictionary<Type, object>();
- _manager = new AutoMockedInstanceManager(this);
+
+ RhinoMocksServiceLocator locator = new RhinoMocksServiceLocator(this);
+ _manager = new AutoMockedInstanceManager(locator);
+
}
- public TARGETCLASS Create<TARGETCLASS>()
+ public TARGETCLASS Create()
{
- throw new NotImplementedException();
+ return _manager.FillDependencies<TARGETCLASS>();
}
- public T Service<T>()
+ public TARGETCLASS CreatePartialMocked()
{
- throw new NotImplementedException();
+ return PartialMock<TARGETCLASS>(getConstructorArgs());
}
- public T UsePartialMock<T>()
+ private object[] getConstructorArgs()
{
- throw new NotImplementedException();
+ ConstructorInfo ctor = Plugin.GetGreediestConstructor(typeof(TARGETCLASS));
+ List<object> list = new List<object>();
+ foreach (ParameterInfo parameterInfo in ctor.GetParameters())
+ {
+ Type dependencyType = parameterInfo.ParameterType;
+ object dependency = _manager.CreateInstance(dependencyType);
+ list.Add(dependency);
+ }
+
+ return list.ToArray();
}
- public void Inject<T>(T stub)
+ public T Service<T>()
{
- throw new NotImplementedException();
+ return _manager.CreateInstance<T>();
}
- public object Service(Type serviceType)
+ public void InjectStub<T>(T stub)
{
- throw new NotImplementedException();
+ _manager.InjectStub<T>(stub);
}
}
}
Added: trunk/Source/StructureMap.AutoMocking/RhinoMocksServiceLocator.cs
===================================================================
--- trunk/Source/StructureMap.AutoMocking/RhinoMocksServiceLocator.cs (rev 0)
+++ trunk/Source/StructureMap.AutoMocking/RhinoMocksServiceLocator.cs 2007-12-30 16:31:10 UTC (rev 51)
@@ -0,0 +1,30 @@
+using System;
+using Rhino.Mocks;
+
+namespace StructureMap.AutoMocking
+{
+ public class RhinoMocksServiceLocator : ServiceLocator
+ {
+ private readonly MockRepository _mocks;
+
+ public RhinoMocksServiceLocator(MockRepository mocks)
+ {
+ _mocks = mocks;
+ }
+
+
+ public RhinoMocksServiceLocator() : this(new MockRepository())
+ {
+ }
+
+ public T Service<T>()
+ {
+ return _mocks.CreateMock<T>();
+ }
+
+ public object Service(Type serviceType)
+ {
+ return _mocks.CreateMock(serviceType);
+ }
+ }
+}
\ No newline at end of file
Added: trunk/Source/StructureMap.AutoMocking/ServiceLocator.cs
===================================================================
--- trunk/Source/StructureMap.AutoMocking/ServiceLocator.cs (rev 0)
+++ trunk/Source/StructureMap.AutoMocking/ServiceLocator.cs 2007-12-30 16:31:10 UTC (rev 51)
@@ -0,0 +1,10 @@
+using System;
+
+namespace StructureMap.AutoMocking
+{
+ public interface ServiceLocator
+ {
+ T Service<T>();
+ object Service(Type serviceType);
+ }
+}
\ No newline at end of file
Modified: trunk/Source/StructureMap.AutoMocking/StructureMap.AutoMocking.csproj
===================================================================
--- trunk/Source/StructureMap.AutoMocking/StructureMap.AutoMocking.csproj 2007-12-22 17:45:18 UTC (rev 50)
+++ trunk/Source/StructureMap.AutoMocking/StructureMap.AutoMocking.csproj 2007-12-30 16:31:10 UTC (rev 51)
@@ -43,6 +43,8 @@
<Compile Include="AutoMockedInstanceManager.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="RhinoAutoMocker.cs" />
+ <Compile Include="RhinoMocksServiceLocator.cs" />
+ <Compile Include="ServiceLocator.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\StructureMap\StructureMap.csproj">
Property changes on: trunk/Source/StructureMap.Testing
___________________________________________________________________
Name: svn:ignore
- bin
obj
*.csproj.user
+ bin
obj
*.csproj.user
[Bb]in
[Dd]ebug
[Rr]elease
*.user
*.aps
*.eto
Modified: trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs 2007-12-22 17:45:18 UTC (rev 50)
+++ trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs 2007-12-30 16:31:10 UTC (rev 51)
@@ -1,14 +1,215 @@
+using System;
using NUnit.Framework;
using Rhino.Mocks;
+using Rhino.Mocks.Impl;
+using Rhino.Mocks.Interfaces;
+using StructureMap.AutoMocking;
namespace StructureMap.Testing.AutoMocking
{
[TestFixture]
public class RhinoAutoMockerTester
{
+ private MockRepository _mocks;
+ private RhinoMocksServiceLocator _locator;
+ private AutoMockedInstanceManager _instanceManager;
+
[SetUp]
public void SetUp()
{
+ _mocks = new MockRepository();
+ _locator = new RhinoMocksServiceLocator(_mocks);
+ _instanceManager = new AutoMockedInstanceManager(_locator);
}
+
+ [Test]
+ public void GetAFullMockForAServiceThatHasNotPreviouslyBeenRequested()
+ {
+ IMockedService service = _instanceManager.CreateInstance<IMockedService>();
+
+
+ Assert.IsNotNull(service);
+ IMockedObject instance = (IMockedObject)service;
+ Assert.AreSame(_mocks, instance.Repository);
+ }
+
+ [Test]
+ public void RequestTheServiceTwiceAndGetTheExactSameMockObject()
+ {
+ IMockedService service = _instanceManager.CreateInstance<IMockedService>();
+ Assert.AreSame(service, _instanceManager.CreateInstance<IMockedService>());
+ Assert.AreSame(service, _instanceManager.CreateInstance<IMockedService>());
+ Assert.AreSame(service, _instanceManager.CreateInstance<IMockedService>());
+ Assert.AreSame(service, _instanceManager.CreateInstance<IMockedService>());
+ }
+
+ [Test]
+ public void InjectAStubAndGetTheStubBack()
+ {
+ StubService stub = new StubService();
+ _instanceManager.InjectStub<IMockedService>(stub);
+
+ Assert.AreSame(stub, _instanceManager.CreateInstance<IMockedService>());
+ Assert.AreSame(stub, _instanceManager.CreateInstance<IMockedService>());
+ Assert.AreSame(stub, _instanceManager.CreateInstance<IMockedService>());
+ }
+
+ [Test]
+ public void AutoFillAConcreteClassWithMocks()
+ {
+ IMockedService service = _instanceManager.CreateInstance<IMockedService>();
+ IMockedService2 service2 = _instanceManager.CreateInstance<IMockedService2>();
+ IMockedService3 service3 = _instanceManager.CreateInstance<IMockedService3>();
+
+ ConcreteClass concreteClass = _instanceManager.FillDependencies<ConcreteClass>();
+ Assert.AreSame(service, concreteClass.Service);
+ Assert.AreSame(service2, concreteClass.Service2);
+ Assert.AreSame(service3, concreteClass.Service3);
+ }
+
+ [Test]
+ public void UseTheAutoMockerToStartUpTheConcreteClass()
+ {
+ RhinoAutoMocker<ConcreteClass> autoMocker = new RhinoAutoMocker<ConcreteClass>();
+
+ using (autoMocker.Record())
+ {
+ Expect.Call(autoMocker.Service<IMockedService>().Name).Return("Jeremy");
+ }
+
+ Assert.AreEqual("Jeremy", autoMocker.Create().Name);
+ }
+
+ [Test]
+ public void UseTheAutoMockerToStartUpTheConcreteClassAsAPartialMockAndSetTheNameMethodUp()
+ {
+ RhinoAutoMocker<ConcreteClass> autoMocker = new RhinoAutoMocker<ConcreteClass>();
+
+ ConcreteClass concreteClass = autoMocker.CreatePartialMocked();
+
+ using (autoMocker.Record())
+ {
+ Expect.Call(concreteClass.Name).Return("Max");
+ }
+
+ Assert.AreEqual("Max", concreteClass.Name);
+ }
+
+ [Test]
+ public void TheAutoMockerPushesInMocksForAllOfTheConstructorArgumentsForAPartialMock()
+ {
+ RhinoAutoMocker<ConcreteClass> autoMocker = new RhinoAutoMocker<ConcreteClass>();
+
+ IMockedService service = autoMocker.Service<IMockedService>();
+ IMockedService2 service2 = autoMocker.Service<IMockedService2>();
+ IMockedService3 service3 = autoMocker.Service<IMockedService3>();
+
+ ConcreteClass concreteClass = autoMocker.CreatePartialMocked();
+
+ Assert.AreSame(service, concreteClass.Service);
+ Assert.AreSame(service2, concreteClass.Service2);
+ Assert.AreSame(service3, concreteClass.Service3);
+ }
+
+
+ [Test]
+ public void TheAutoMockerPushesInMocksAndAPreBuiltStubForAllOfTheConstructorArguments()
+ {
+ RhinoAutoMocker<ConcreteClass> autoMocker = new RhinoAutoMocker<ConcreteClass>();
+ StubService stub = new StubService();
+ autoMocker.InjectStub<IMockedService>(stub);
+
+ IMockedService2 service2 = autoMocker.Service<IMockedService2>();
+ IMockedService3 service3 = autoMocker.Service<IMockedService3>();
+
+ ConcreteClass concreteClass = autoMocker.Create();
+
+ Assert.AreSame(stub, concreteClass.Service);
+ Assert.AreSame(service2, concreteClass.Service2);
+ Assert.AreSame(service3, concreteClass.Service3);
+ }
+
+
+ public class ConcreteClass
+ {
+ private readonly IMockedService _service;
+ private readonly IMockedService2 _service2;
+ private readonly IMockedService3 _service3;
+
+ public ConcreteClass(IMockedService service, IMockedService2 service2, IMockedService3 service3)
+ {
+ _service = service;
+ _service2 = service2;
+ _service3 = service3;
+ }
+
+ public virtual string Name
+ {
+ get
+ {
+ return _service.Name;
+ }
+ }
+
+ public IMockedService Service
+ {
+ get { return _service; }
+ }
+
+ public IMockedService2 Service2
+ {
+ get { return _service2; }
+ }
+
+ public IMockedService3 Service3
+ {
+ get { return _service3; }
+ }
+ }
+
+ public interface IMockedService
+ {
+ void Go();
+ string Name { get;}
+ }
+
+ public interface IMockedService2
+ {
+ void Go();
+ }
+
+ public interface IMockedService3
+ {
+ void Go();
+ }
+
+
+
+ public class StubService : IMockedService
+ {
+ private readonly string _name;
+
+ public StubService()
+ {
+ }
+
+ public StubService(string name)
+ {
+ _name = name;
+ }
+
+
+ public string Name
+ {
+ get { return _name; }
+ }
+
+ public void Go()
+ {
+ throw new NotImplementedException();
+ }
+ }
}
+
+
}
Modified: trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj
===================================================================
--- trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2007-12-22 17:45:18 UTC (rev 50)
+++ trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2007-12-30 16:31:10 UTC (rev 51)
@@ -99,6 +99,10 @@
<Reference Include="System.Xml">
<Name>System.XML</Name>
</Reference>
+ <ProjectReference Include="..\StructureMap.AutoMocking\StructureMap.AutoMocking.csproj">
+ <Project>{0ED1B206-A1C9-4A52-BA87-3BA416C8725C}</Project>
+ <Name>StructureMap.AutoMocking</Name>
+ </ProjectReference>
<ProjectReference Include="..\StructureMap.Client\StructureMap.Client.csproj">
<Name>StructureMap.Client</Name>
<Project>{887C4441-07A4-489D-B8D9-EFE9D28A47CA}</Project>
Modified: trunk/bin/Rhino.Mocks.dll
===================================================================
(Binary files differ)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|