ControllerContext.RouteData の Values プロパティに依存するいくつかのアプリケーション ロジックをテストしようとしています。
これまでのところ、
// Arrange
var httpContextMock = new Mock<HttpContextBase>(MockBehavior.Loose);
var controllerMock = new Mock<ControllerBase>(MockBehavior.Loose);
var routeDataMock = new Mock<RouteData>();
var wantedRouteValues = new Dictionary<string, string>();
wantedRouteValues.Add("key1", "value1");
var routeValues = new RouteValueDictionary(wantedRouteValues);
routeDataMock.SetupGet(r => r.Values).Returns(routeValues); <=== Fails here
var controllerContext = new ControllerContext(httpContextMock.Object, routeDataMock.Object, controllerMock.Object);
単体テストは次のエラーで失敗します: System.ArgumentException: Invalid setup on a non-overridable member: r => r.Values
コンストラクターが RouteData(RouteBase,IRouteHandler) であるため、偽の RouteData を作成しても機能しません。
ここで重要なクラスは、私が偽造しようとしている RouteData のインスタンスを返すメソッド GetRouteData(HttpContextBase) を持つ抽象クラス RouteBase です。ぐるぐる回って!
これに関するヘルプは大歓迎です。