Как мне издеваться над объектом моей задачи

#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?