对Web API插入记录方法执行xUnit Moq测试



我有一个带有.NET CORE 2.2的应用程序。Web API,并使用moq和fixture创建了xUnit测试。

我的控制器Method获取SupplierDtoObject,然后调用创建供应商记录的服务方法,并返回新创建记录的Guid Id。然后控制器方法通过传递Id来调用服务类中的GetSupplier对象。(新记录(

由于我的控制器方法返回Supplier Object,并且Id是在服务类级别生成的,所以不确定如何取消这种行为?

控制器方法(SUT(

[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
??
}

我已经设法解决了。。。

[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);
}

最新更新