I'm still learning C# and.Net. Trying to create a mock so that I can test my factory class:
public class PublishServiceClientFactory
{
/// <summary>
/// method <c>GetInstance</c> creates a PublishServiceClient
/// instantiation
/// </summary>
/// <param name="serviceProvider"></param>
/// <returns>PublishServiceClient</returns>
public static IPublishServiceClient GetInstance(IServiceProvider serviceProvider)
{
var options = serviceProvider.GetService<IOptions<PublishServiceClientConfiguration>>();
var configuration = options.Value;
var logger = serviceProvider.GetService<ILogger<PublishServiceClient>>();
var httpClient = new HttpClient
{
BaseAddress = new Uri(configuration.Uri)
};
return new PublishServiceClient(httpClient, configuration.Key, logger);
}
}
My attempt at implementing the unit test:
public class PublishServiceClientFactoryTests
{
private readonly Mock<IServiceProvider> serviceProviderMock;
public PublishServiceClientFactoryTests()
{
serviceProviderMock = new Mock<IServiceProvider>();
}
[Fact]
public void GetInstance_Returns_instance_of_PublishServiceClient()
{
// arrange
serviceProviderMock
.Setup(x
=> x.GetService<IOptions<PublishServiceClientConfiguration>>())
.Returns(new PublishServiceClientConfiguration());
// act
var result = PublishServiceClientFactory.GetInstance(serviceProviderMock.Object);
// assert
Assert.NotNull(result);
}
}
I've been banging my head for a few hours. Took a look a this issue
but was unable to resolve. Any help will be appreciated.
1条答案
按热度按时间zvms9eto1#
I think you can avoiding mocks for your scenario, but create actual service provider instead.