Допустим, я хочу протестировать метод со следующей сигнатурой на утечки памяти с помощью модуля 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()
изолированно, так что оно выйдет из области действия к тому моменту, когда тест форсирует сборку мусора и проверяет память?