Aspnetcore: ActionContext()を使用してUrlHelperを作成すると、NullReferenceExceptionが発生します

作成日 2019年01月15日  ·  3コメント  ·  ソース: dotnet/aspnetcore

バグを説明する

ActionContext()を使用してテスト目的でURLHelperを作成しようとすると、NullReferenceExceptionがスローされます。

再現するには

動作を再現する手順:

  1. 空のMVCコア2.2ソリューションを作成する
  2. xunitテストプロジェクトを作成する
  3. NuGet Microsoft.AspNetCore.Mvc.Core2.2.0をインストールします
  4. テストに書き込みます。varUrl= new UrlHelper(new ActionContext());
  5. テストを実行する

予想される行動

スローメッセージ:System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません。

追加のコンテキスト

バグレポートはStackOverflowにもあります:
https://stackoverflow.com/questions/54199103/trying-to-test-a-controller-with-a-urlhelper

bug

By Design area-mvc

全てのコメント3件

ここで何が起こるかというと、 UrlHelperActionContextRouteDataプロパティにアクセスして、値があるかどうかを確認しようとするため、例外が発生します。 これを修正するには、次のようにします。

var url = new UrlHelper( new ActionContext{ RouteData = new RouteData() } );

その特定のコンストラクターは、単体テストに使用するために文書化されています。具体的には、 ActionContext渡す必要があるだけで、消費コードでは使用されない場合です。 @navelDirtが提案した方法でそれを設定するのが道

さらに進んで、コードの一部が特定のURLを生成するかどうかを単体テストする場合は、スタブ\モックIUrlHelperを使用してより良い成功を収めることができます。 実際の結果を確認する必要がある場合は、統合テストを作成することを強くお勧めし

@navelDirtと@pranavkmに感謝します。
コア1.1ではRouteDataを設定せずに動作したので混乱しましたが、2.2に切り替えるとクラッシュしました。 だからバグだと思ったのですが…ご不便をおかけして申し訳ありません。

このページは役に立ちましたか?
0 / 5 - 0 評価