#c# #mocking #task-parallel-library #task #moq
#c# #издевательство #задача-параллельная-библиотека #задача #moq
Вопрос:
У меня есть страница регистрации, которая выполняет асинхронный вызов, как показано ниже
var registeredAccount = await _accountServiceChannel.RegisterAsync(accountContract);
Как я могу издеваться над возвращаемым объектом, я попытался построить, как показано ниже
[Test]
public void Display_Validate_Account_Page_On_Successful_Registration()
{
//arrange
var businessContract = Mapper.Map<BusinessViewModel, BusinessContract>(_userRegisterationViewModel.Business);
var userContract = Mapper.Map<UserViewModel, UserContract>(_userRegisterationViewModel.User);
var accountContract = new AccountContract()
{
Business = businessContract,
User = userContract
};
_mockAccountContract
.Setup(contract => contract.Result.Value.Business)
.Returns(accountContract.Business);
_mockAccountContract
.Setup(contract => contract.Result.Value.User)
.Returns(accountContract.User);
_mockAccountServiceChannel
.Setup(svc => svc.RegisterAsync(accountContract))
.Returns(_mockAccountContract.Object);
//act
var result = (RedirectToRouteResult)_registerController.Register(_userRegisterationViewModel).Resu<
//assert
Assert.That(result.RouteValues["action"], Is.EqualTo("ValidateAccount"));
}
Но я думаю, что это не работает, потому что я пытаюсь установить объект, который имеет только свойство get.
Ответ №1:
Используйте ReturnsAsync
_mockAccountServiceChannel
.Setup(svc => svc.RegisterAsync(accountContract))
.ReturnsAsync(_mockAccountContract.Object);
Вы также должны сделать тест асинхронным
[Test]
public async Task Display_Validate_Account_Page_On_Successful_Registration()
{
//arrange
var businessContract = Mapper.Map<BusinessViewModel, BusinessContract>(_userRegisterationViewModel.Business);
var userContract = Mapper.Map<UserViewModel, UserContract>(_userRegisterationViewModel.User);
var accountContract = new AccountContract()
{
Business = businessContract,
User = userContract
};
_mockAccountContract
.Setup(contract => contract.Result.Value.Business)
.Returns(accountContract.Business);
_mockAccountContract
.Setup(contract => contract.Result.Value.User)
.Returns(accountContract.User);
_mockAccountServiceChannel
.Setup(svc => svc.RegisterAsync(accountContract))
.ReturnsAsync(_mockAccountContract.Object);
//act
var result = (RedirectToRouteResult) await _registerController.Register(_userRegisterationViewModel);
//assert
Assert.That(result.RouteValues["action"], Is.EqualTo("ValidateAccount"));
}
Комментарии:
1. Это даже не будет компилироваться
2. Какую версию, если вы используете moq?