【发布时间】:2013-01-26 20:49:22
【问题描述】:
我正在开始开发一个新的 MVC 应用程序,该应用程序将主要使用 TDD 编写。我想添加一些集成测试以确保完全连接的应用程序(我将 StructureMap 用于 IOC,NHibernate 用于持久性)按预期工作。
虽然我打算使用 Selenium 编写一些功能性冒烟测试,但出于可维护性的原因,我宁愿通过使用良好的旧 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>();
}
}
【问题讨论】:
标签: asp.net-mvc integration-testing mvccontrib