Как проверить асинхронную функцию, которая возвращает задачу на утечки памяти с помощью модуля dotmemory? - PullRequest
0 голосов
/ 02 июля 2019

Допустим, я хочу протестировать метод со следующей сигнатурой на утечки памяти с помощью модуля dotmemory и nunit:

Task<double[,]> PrepareAsync(CancellationToken cancellationToken);

Функция создает и использует объект PrepareMediator, который является локальным по отношению к объему функции. Я хочу проверить, остались ли в памяти PrepareMediator объекты после выполнения этой задачи.

Насколько я понимаю, вызовы функций в модульных тестах dotmemory должны быть изолированы, чтобы к моменту проверки памяти они выходили за рамки.

Однако я не уверен, как правильно сделать это с async функциями, которые возвращают Task<T> объекты.

Я уверен, что тест закончился бы по следующей логике:

GC.Collect();
dotMemory.Check(memory =>
        Assert.That(memory.GetObjects(where => where.Type.Is<PrepareMediator>()).ObjectsCount,
            Is.EqualTo(0)));

Как тест будет запускать задание, возвращаемое PrepareAsync() изолированно, так что оно выйдет из области действия к тому моменту, когда тест форсирует сборку мусора и проверяет память?

...