using System.Collections.Generic;
namespace ANW.Website.Unit.Tests.New
public abstract class ControllerTestContext<T> : ContextSpecification<T>
private Dictionary<string, object> _dic;
public ControllerTestContext()
_dic = new Dictionary<string, object>();
var ctors = typeof(T).GetConstructors();
foreach (var param in ctor.GetParameters())
_dic.Add(param.ParameterType.Name, DynamicMock(param.ParameterType));
SUT = (T)Activator.CreateInstance(typeof(T), _dic.Values.Select(x=> Convert(x)).ToArray());
protected Mock<T> MockOf<T>() where T : class
return (Mock<T>) _dic[typeof (T).Name];
private static object DynamicMock(Type type)
return typeof(Mock<>).MakeGenericType(type).GetConstructor(Type.EmptyTypes).Invoke(new object[] { });
private static object Convert(object ob)
return ob.GetType().GetProperties().First(f => f.Name == "Object" && f.ReflectedType != typeof(Object)).GetValue(ob, new object[] { });