2

コントローラーのアクションで単体テストを実行したいのですが、アクションが正しく実行される前に OnActionExecuting フィルターを実行する必要があります。

多くのアクション フィルターを使用しているため、テストを行うたびに手動で実行したくありません。

以下のようにコントローラーのアクション メソッドを直接呼び出すと、結果は取得できますが、フィルターは実行されません。

ViewResult vr = myController.MyAction("hello world") as ViewResult;
Assert.AreEqual("View1", vr.ViewName);

次のようなアクションを呼び出すときにアクション フィルターを実行する方法を見つけました。

var routeData = new RouteData();
routeData.Values["controller"] = "MyController";
routeData.Values["action"] = "MyAction";

var rc = new RequestContext(new HttpContextWrapper(HttpContext.Current), routeData);
(myController as IController).Execute(rc);

しかし、アクション結果を取得する方法が見つかりません。アクションフィルターを起動してアクション結果を取得することは可能ですか?

4

1 に答える 1

0

ここでいくつかの点が欠けていると思います。

単体テストについて話している場合は、通常、動作を個別に検証する必要があります。

個人的にアクション フィルターを個別にテストし、コントローラーのアクション メソッドを個別にテストします。Controller の Action メソッドが特定の Filter 属性を使用していることを確認したい場合は、個別の単体テストです。そのために、このようなものを使用できます。

この方法の利点は、他の依存関係を気にすることなく、問題を分離して見つけることができることです。この方法で単体テストを自動化する最大のメリットが得られます。

于 2013-11-06T10:54:32.013 に答える