2016-10-10 81 views
-1

我有一个注册页面,这使得下面如何嘲笑我的工作对象

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).Result; 

    //assert 
    Assert.That(result.RouteValues["action"], Is.EqualTo("ValidateAccount")); 
} 

但我认为这是行不通的,因为我想设置一个只有get属性的对象。

回答

2

使用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")); 
} 
+0

如果起订量,你使用甚至不会编译 –

+0

什么版本? – Nkosi

+0

你在哪里得到错误? – Nkosi