ActionContext()を使用してテスト目的でURLHelperを作成しようとすると、NullReferenceExceptionがスローされます。
動作を再現する手順:
スローメッセージ:System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません。
バグレポートはStackOverflowにもあります:
https://stackoverflow.com/questions/54199103/trying-to-test-a-controller-with-a-urlhelper
ここで何が起こるかというと、 UrlHelper
はActionContext
のRouteData
プロパティにアクセスして、値があるかどうかを確認しようとするため、例外が発生します。 これを修正するには、次のようにします。
var url = new UrlHelper( new ActionContext{ RouteData = new RouteData() } );
その特定のコンストラクターは、単体テストに使用するために文書化されています。具体的には、 ActionContext
渡す必要があるだけで、消費コードでは使用されない場合です。 @navelDirtが提案した方法でそれを設定するのが道
さらに進んで、コードの一部が特定のURLを生成するかどうかを単体テストする場合は、スタブ\モックIUrlHelper
を使用してより良い成功を収めることができます。 実際の結果を確認する必要がある場合は、統合テストを作成することを強くお勧めし
@navelDirtと@pranavkmに感謝します。
コア1.1ではRouteDataを設定せずに動作したので混乱しましたが、2.2に切り替えるとクラッシュしました。 だからバグだと思ったのですが…ご不便をおかけして申し訳ありません。