みなさん、こんにちは。

今回はこちらの記事が元ネタです。こちら

今回も前回と同じくMVCのPreview版での記事です。

頑張ってみましたが、全てをやるのは無理でした。

とにかく中身へ。

記事は前回のものを使用します。

忘れた方、まだやってない方は前回のブログを参照してください。

1ページ目、2ページ目と見ていきます。

AccountControllerの中身は正式版と異なっていますが、そこはスルーで。

3ページ目に移るとテストになっています。

追加するのはVisualC#のテストプロジェクトで大丈夫です。

最初のコードでは、デフォルトの場合はうまく行きます。

では、それ以外の時はどうなるかというと、どうも私の場合は、

global::System.Configuration.ConfigurationManager.ConnectionStrings["pubsConnectionString"]

がnullになってエラーになります。

そこで、PubsControllerの中で、

PubsDataContext pubsDC = global::System.Configuration.ConfigurationManager.ConnectionStrings["pubsConnectionString"] == null ? new PubsDataContext("Integrated Security=True;Initial Catalog=Pubs;Data Source=(local)\\SQLEXPRESS") : new PubsDataContext();

という具合に変更するとうまく動くのですが、テストのためにコードを書き換えるのは・・・どうでしょうか?

次のルーティングのテストにおいては、記事に書いているMvcFakers.dllを入手します。

http://stephenwalther.com/blog/archive/2008/09/12/asp-net-mvc-application-building-forums-5-membership.aspx

の中のDownload the codeの所からソースをダウンロードするとプロジェクトの中のbinの中にあります。

テストコードの中のGlobalApplicationはMvcApplicationに変わっています

コードは次のようになります。

---------------------------------------------------------------------------------------------------

[TestMethod]
public void RegisterRoute()
{
    RouteCollection routes = new RouteCollection();

    MvcApplication.RegisterRoutes(routes);
    var context = new FakeHttpContext("~/Pubs/Publisher");
    RouteData route = routes.GetRouteData(context);

    Assert.IsNotNull(route, "探しているルートが見つかりませんでした。");
    Assert.AreEqual("Pubs", route.Values["controller"], "Pubsがコントローラーに見つかりませんでした。");
    Assert.AreEqual("Publisher", route.Values["action"], "PublisherがActionに見つかりませんでした。");
}

---------------------------------------------------------------------------------------------------

4ページ目に移ってフィルターになります。

現在は次のようにしないといけないようです。

--------------------------------------------------------------------------------------------------

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class UserFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        //base.OnActionExecuting(filterContext);
        if (filterContext.HttpContext.User.Identity.Name != "naoki")
        {
            throw new SecurityException("naokiしか表示できません。");
        }
    }
}

-------------------------------------------------------------------------------------------------

5ページ目以降はうまくできませんでした。

お許しを。

では、次回にまた会いましょう!(あればですが・・・