単体テストで Moq を使用していますが、テストが失敗する理由がわかりません。
これが私が得ているエラーです
Moq.MockVerificationException : 次の設定が一致しませんでした:
IGroupRepository r => r.Delete(It.Is(um => um.Equals()))
これが私がテストしようとしているサービスです。
サービス
public GroupService ( IGroupRepository groupRepository )
{
_groupModelToViewModelMapper = new AutoMapper<GroupModel, GroupViewModel>();
_groupViewModelToModelMapper = new AutoMapper<GroupViewModel, GroupModel>();
_groupRepository = groupRepository;
}
public void Delete( GroupViewModel viewModel )
{
_groupRepository.Delete( _groupViewModelToModelMapper.BuildFrom( viewModel ) );
}
テスト
[Test]
public void FAILING_TEST ()
{
// Setup the Mock GroupRepository
_groupRepository.Setup( r => r.Delete( It.Is<GroupModel>( um => um.Equals( _groupModel ) ) ) );
var groupService = new GroupService( _groupRepository.Object);
// execute
groupService.Delete( _groupViewModel );
// assert
_groupRepository.VerifyAll();
}
私が理解できないのは、AutoMapper を注入すると、テストがパスするということです。オートマッパーは基本的にマッピング対象のサービス モデルと 1 対 1 であるため、オートマッパーを注入する意味がわかりません。
サービス
public GroupService( IGroupRepository groupRepository,
IAutoMapper<GroupViewModel, GroupModel> groupViewModelToModelMapper,
IAutoMapper<GroupModel, GroupViewModel> groupModelToViewModelMapper )
{
_groupModelToViewModelMapper = groupModelToViewModelMapper;
_groupRepository = groupRepository;
_groupViewModelToModelMapper = groupViewModelToModelMapper;
}
public void Delete( GroupViewModel viewModel )
{
_groupRepository.Delete( _groupViewModelToModelMapper.BuildFrom( viewModel ) );
}
テスト
[Test]
public void PASSING_TEST()
{
// Setup the Mock GroupRepository
_groupRepository.Setup(r => r.Delete(It.Is<GroupModel>(um => um.Equals(_groupModel))));
// Setup the Mock ModelMapper
_viewModelToModelMapper.Setup(vmm => vmm.BuildFrom(It.Is<GroupViewModel>(u => u.Equals(_groupViewModel))))
.Returns(_groupModel);
var groupService = new GroupService(_groupRepository.Object, _viewModelToModelMapper.Object, _modelToViewModelMapper.Object);
// execute
groupService.Delete(_groupViewModel);
// assert
_groupRepository.VerifyAll();
_viewModelToModelMapper.VerifyAll();
}
また、有効な場合は、テスト セットアップを次に示します。
private GroupModel _groupModel;
private List<GroupModel> _groupModels;
private GroupViewModel _groupViewModel;
private List<GroupViewModel> _groupViewModels;
private Mock<IGroupRepository> _groupRepository;
private Mock<IAutoMapper<GroupViewModel, GroupModel>> _viewModelToModelMapper;
private Mock<IAutoMapper<GroupModel, GroupViewModel>> _modelToViewModelMapper;
[SetUp]
public void SetUp()
{
_groupModel = new GroupModel();
_groupModels = new List<GroupModel>();
_groupViewModel = new GroupViewModel();
_groupViewModels = new List<GroupViewModel>();
_groupRepository = new Mock<IGroupRepository>();
_viewModelToModelMapper = new Mock<IAutoMapper<GroupViewModel, GroupModel>>();
_modelToViewModelMapper = new Mock<IAutoMapper<GroupModel, GroupViewModel>>();
}
誰かがこの嘲笑のコツをつかむのを手伝ってくれませんか?