2017-02-26 89 views
0

我在我的數據/服務層有這個方法。我們開始使用xUnit和MoQ進行單元測試。我們使用Autofac作爲我們的Io​​C容器。如何在此特定場景中使用Moq和xUnit添加單元測試?

如何使用xUnit和MoQ爲此方法設置單元測試? 請求特定的代碼說明假冒的使用(如果需要)

public async Task<AddressModel> AddAddress(string useridKey, AddressModel addressModel) 
{ 
    IAddress address = AddressConverters.ToIAddressFromAddressModel(addressModel); 
    IAddress newAddress = await _userManager.AddShippingAddressAsync(userKey, address).ConfigureAwait(false); 
    return AddressConverters.ToAddressModel(newAddress); 
} 
+0

從外觀上看,有點難以分辨,你只需要模擬AddShippingAddressAsync。是通過autofac獲取的_userManger? –

+0

@KeithNicholas yes _userManager通過AutoFac獲取 – GilliVilla

回答

0

你需要注入模擬用戶管理器,然後像做

mockUserManager.Setup(arg=>arg.AddShippingAddressAsync(It.Is<string>, It.Is<IAddress>)) 
    .ReturnsAsync(myNewAddressWhateverYouWantToReturn); 

我不是100%左右的xUnit異步支持,但它看起來像它應該像

[Fact] 
private async Task TestAddingAddress() 
{ 
    // inject your mock, either here on setup... 

    var thingWithAdd = new Foo(); //or inject mock into constructor... 
    var newAddress = await thingWithAdd.AddAddress("", new AddressModel()); 

    // assert something about it.... 
} 

但是,我不知道你的一些功能呢,還是他們有什麼依賴性,則可能需要模擬幾μm礦石的東西。