我開始對將使用TDD在很大程度上寫了一個新的MVC應用程序開發的痛苦測試的MVC應用程序。我想添加一些集成測試,以確保完全有線的應用程序(我使用IOC的StructureMap,NHibernate的持久性)按預期工作。集成無UI自動化
雖然我打算寫硒幾個功能煙霧測試,可維護性的原因,我寧願做我最集成測試通過直接調用,使用好老的C#我的控制器動作。
有一個如何做到這一點少得驚人的指導,所以我花了刺攻擊
- 把所有啓動代碼出來的Global.asax,併成爲一個單獨的類
- 嘗試的計劃利用MvcContrib-TestHelper或類似創建ASP.NET依賴(上下文,請求等)
我已經完成第1步,但真的不知道如何繼續執行步驟2的任何指導,將不勝感激。
public class Bootstrapper
{
public static void Bootstrap()
{
DependencyResolverInitializer.Initialize();
FilterConfig.RegisterFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
ModelBinders.Binders.DefaultBinder = new SharpModelBinder();
}
}
public class DependencyResolverInitializer
{
public static Container Initialize()
{
var container = new Container();
container.Configure(x => x.Scan(y =>
{
y.Assembly(typeof(Webmin.UI.FilterConfig).Assembly);
y.WithDefaultConventions();
y.LookForRegistries();
}));
DependencyResolver.SetResolver(new StructureMapDependencyResolver(container));
return container;
}
}
public class StructureMapDependencyResolver : IDependencyResolver
{
private readonly IContainer _container;
public StructureMapDependencyResolver(IContainer container)
{
_container = container;
}
public object GetService(Type serviceType)
{
if (serviceType.IsAbstract || serviceType.IsInterface) {
return _container.TryGetInstance(serviceType);
}
return _container.GetInstance(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType)
{
return _container.GetAllInstances(serviceType).Cast<object>();
}
}