TDD を使用して大部分が作成される新しい MVC アプリケーションの開発を開始しています。完全に接続されたアプリケーション (IOC には StructureMap を使用し、永続化には 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>();
}
}