How to write Testcases with ServiceProvider.GetKeyedService method in .Net 8?
DI Registeration
Class using Service
While running unit test cases, I am getting below error It seems we can not moq Extension methods. if it is case, how we can unit test any KeyedService registration?
Unsupported expression: a => a.GetKeyedService<IReceivableDocument>((object)It.IsAny<ReceivableCompanyType>())
Extension methods (here: ServiceProviderKeyedServiceExtensions.GetKeyedService) may not be used in setup / verification expressions.
services.AddKeyedTransient<IReceivableDocument,BuyerReceivableDocumentStrategy>(ReceivableCompanyType.Buyer);
services.AddKeyedTransient<IReceivableDocument,AuctionReceivableDocumentStrategy>(ReceivableCompanyType.Auction);Class using Service
public class TestReceivableCommandHandler(IServiceProvider receivableDocumentResolver)
: IRequestHandler<CreateReceivableCommand, Result<Unit, ValidationException>>
{
public async Task<Result<Unit, ValidationException>> Handle(CreateReceivableCommand request,
CancellationToken cancellationToken)
{
var receivableStrategy =
receivableDocumentResolver.GetRequiredKeyedService<IReceivableDocument>(
(ReceivableCompanyType)request.CustomerTypeID);
return Result<Unit, ValidationException>.SucceedWith(Unit.Value);
}
}While running unit test cases, I am getting below error It seems we can not moq Extension methods. if it is case, how we can unit test any KeyedService registration?
Unsupported expression: a => a.GetKeyedService<IReceivableDocument>((object)It.IsAny<ReceivableCompanyType>())
Extension methods (here: ServiceProviderKeyedServiceExtensions.GetKeyedService) may not be used in setup / verification expressions.