public async Task CreateOption_ProductExists() { //Arrange var productRepository = new Mock <IAsyncRepository <ProductAggregate.Product> >(); productRepository.Setup(repo => repo.UpdateAsync(It.IsAny <ProductAggregate.Product>())) .Callback( (ProductAggregate.Product p) => { p.ProductOptions = p.ProductOptions.Select (option => new ProductAggregate.ProductOption() { Name = option.Name, Description = option.Description, Product = p, ProductId = p.Id, Id = new Guid() }).ToList(); }); productRepository.Setup(repo => repo.GetByIdAsync(It.IsAny <Guid>())) .ReturnsAsync(MockObjects.Product.GetProduct()) .Verifiable(); var productOptionRepository = new Mock <IAsyncRepository <ProductAggregate.ProductOption> >(); var controlller = new ProductOptionsController(productRepository.Object, productOptionRepository.Object); //Act var productOptionDTO = MockObjects.ProductOption.GetProductOptionDTO(); var productGuid = new Guid(); var result = await controlller.CreateOptionAsync(productGuid, productOptionDTO); var createdResult = result as CreatedResult; var productOption = createdResult.Value as Messages.ProductOption; //Assert productRepository.Verify(); Assert.NotNull(createdResult); Assert.NotNull(productOption); Assert.NotNull(productOption.Id); Assert.Equal(productOptionDTO.Name, productOption.Name); Assert.Equal(productOptionDTO.Description, productOption.Description); Assert.Equal(StatusCodes.Status201Created, createdResult.StatusCode); }