Reputation: 5075
I have an application with .NET CORE 2.2. Web API and created a xUnit test using moq and fixture.
My controller Method takes SupplierDtoObject followed by it calls the service method where creates supplier record and it returns Guid Id of newly created records. Then the controller method calls GetSupplier in service class by passing the Id to get Supplier object. (new record)
Since my controller method returns Supplier Object and Id is generated at the service class level so not sure how to moq this behaviour?
[HttpPost]
public async Task<ActionResult<Supplier>> PostSupplier(SupplierDto supplier)
{
var newlyCreatedSupplierId = await _supplierService.InsertSupplier(supplier);
if (newlyCreatedSupplierId != Guid.Empty)
{
var newlyCreatedSupplier = await _supplierService.GetSupplier(newlyCreatedSupplierId);
return newlyCreatedSupplier;
}
return null;
}
[Fact]
public async Task PostSupplier_WithValidSupplierData_Should_CreateSupplierInstance()
{
//Arrange
var fixture = new Fixture();
var supplierDtoMockData = fixture.Create<SupplierDto>();
var supplierMoqData = GetSupplerDataModelObject(supplierDtoMockData);
mockSupplierService.Setup(m => m.InsertSupplier(supplierDtoMockData)).ReturnsAsync(supplierMoqData.Id);
//How to moq Supplier based on based on supplierMoqData.Id???
//Act
var actualResultData = sut.PostSupplier(supplierDtoMockData);??
//Assert
??
}
Upvotes: 0
Views: 389
Reputation: 5075
I have managed to sort it out ...
[Fact]
public async Task PostSupplier_WithSupplierData_Should_CreateSupplierInstance()
{
//Arrange
var fixture = new Fixture();
var supplierDtoMockData = fixture.Create<SupplierDto>();
var supplierMockData = GetSupplerDataModelObject(supplierDtoMockData);
mockSupplierService.Setup(m => m.InsertSupplier(supplierDtoMockData)).ReturnsAsync(supplierMockData.Id);
mockSupplierService.Setup(m => m.GetSupplier(supplierMockData.Id)).ReturnsAsync(supplierMockData);
//Act
var actualDataResult = await sut.PostSupplier(supplierDtoMockData);
//Assert
Assert.Equal(supplierMockData, actualDataResult.Value);
}
Upvotes: 1