置換された呼び出しに渡されたパラメーターが一致しないため、NSubstitute で失敗したテストがあります。テストされている関連コードは次のとおりです。
// Arrange
PermissionsProviderSub = Substitute.For<IPermissionsProvider>();
MenuDataProviderSub = Substitute.For<IMenuDataProvider>();
PermissionsProviderSub.GetPermissions(UserId).Returns(ExpectedUserPermissions);
MenuDataProviderSub.GetMenuData(ExpectedUserPermissions.AuthorisedPageIds).Returns(Arg.Any<IList<BusinessFocusArea>>());
var sut = new MenuViewModelFactory(MenuDataProviderSub, PermissionsProviderSub);
// Act
var result = sut.Create();
// Assert
MenuDataProviderSub.Received().GetMenuData(ExpectedUserPermissions.AuthorisedPageIds);
この問題は、ExpectedUserPermissions.AuthorisedPageIds
次のようなプロパティで発生します。
public IEnumerable<string> AuthorisedPageIds
{
get
{
return ApplicationPagePermissions != null ?
ApplicationPagePermissions.Select(permissionSet => permissionSet.PageId) :
Enumerable.Empty<string>();
}
}
ご覧のとおり、コレクションPageId
内からプロパティを抽出し、それを として返す LINQ Select があります。そのプロパティ内のプロジェクションは新しいオブジェクトを作成するため、2 つのオブジェクトが異なるものとして認識されるため、置換は一致しません。ApplicationPagePermissions
IEnumerable<string>
渡されたパラメータにコールバックを作成して、GetMenuData
その値を調べることはできますか?
NSubstitute コールバックに関するドキュメントでは、呼び出しに渡されるパラメーターではなく、呼び出しからの戻り値の調査についてのみ説明しています。