Периодически не проходит async unit test

Есть контроллер

[ApiController]
[Route("[controller]")]
public class MyController : ControllerBase
{
    readonly IInterface MyInterface;
    readonly IHttpClientFactory ClientFactory;

    public MyController(IInterface myInterface, IHttpClientFactory clientFactory)
        => (MyInterface, ClientFactory) = (myInterface, clientFactory);

    [HttpPost("/PostData")]
    public async Task PostData(MyObject object)
    {
        var message = MyInterface.Convert(object);
        using var client = ClientFactory.CreateClient();
        _ = await client.PostAsync(new Uri(message.Link),
        new StringContent(message.Content, Encoding.UTF8, "application/json"));
    }
}

хочу проверить что вызвался MyInterface.Convert(), и ClientFactory.CreateClient();

есть два теста и SetUp

[TestFixture]
class MyControllerTests
{
    HttpClient Client;
    Mock<IHttpClientFactory> MockHttpClientFactory;
    Mock<IInterface> MockMyInterface;

    [SetUp]
    public void SetUp()
    {
        var factory = new WebApplicationFactory<Startup>();
        MockMyInterface = new Mock<IInterface>();
        MockHttpClientFactory = new Mock<IHttpClientFactory>();
        
        var handlerMock = new Mock<HttpMessageHandler>();
        handlerMock.Protected().Setup<Task<HttpResponseMessage>>("SendAsync", 
            ItExpr.IsAny<HttpRequestMessage>(),
            ItExpr.IsAny<CancellationToken>())
        .ReturnsAsync(new HttpResponseMessage() { StatusCode = HttpStatusCode.OK }).Verifiable();

        MockHttpClientFactory.Setup(c => c.CreateClient(It.IsAny<string>())).Returns(new HttpClient(handlerMock.Object));

        MockMyInterface.Setup(c => c.Convert(It.IsAny<MyObject>())).Returns(new MessageAnswerDTO() { Link = "http://localhost/Post", Content = "content" }); 
        Client = factory.WithWebHostBuilder(builder =>
        {
            builder.ConfigureTestServices(services =>
            {
                var myInterfaceDescriptor = services.SingleOrDefault(c => c.ServiceType == typeof(IInterface));
                var httpClientFactory = services.SingleOrDefault(c => c.ServiceType == typeof(IHttpClientFactory));
                services.Remove(myInterfaceDescriptor);
                services.Remove(httpClientFactory);
                services.AddScoped(c => MockMyInterface.Object);
                services.AddSingleton(c => MockHttpClientFactory.Object);
            });
        }).CreateClient();
    }

    [Test]
    public async Task Configuration_CreateClient_Test()
    {
        var message = new MyObject() { Id1 = 1, Id2 = 2 };
        var content = JsonConvert.SerializeObject(message);

        var result = await Client.PostAsync(new Uri("http://localhost/PostData"),
            new StringContent(content, Encoding.UTF8, "application/json"));

        MockHttpClientFactory.Verify(c => c.CreateClient(It.IsAny<string>()));
    }

    [Test]
    public async Task Configuration_Convert_Test()
    {
        var message = new MyObject() { Id1 = 1, Id2 = 2 };
        var content = JsonConvert.SerializeObject(message);

        var result = await Client.PostAsync(new Uri("http://localhost/PostData"),
            new StringContent(content, Encoding.UTF8, "application/json"));

        MockMyInterface.Verify(c => c.Convert(It.IsAny<MyObject>()));
    }
}

Тест Configuration_Convert_Test не проходит никогда, хотя когда прохожу по шагам он точно вызывается и возвращает то что я ему засетапил. Тест Configuration_CreateClient_Test то проходит то валится случайным образом по причине того что проверяемый метод не был вызван. Запускал подряд много раз закономерности не заметил. Подскажите где и что я делаю не так.


Ответы (0 шт):