В отношении моего предыдущего вопроса, мне нужно проверить, будет ли компонент, который будет создан экземпляром Castle Windsor, может быть собран из мусора после того, как мой код завершил его использование, Я попробовал предложение в ответах на предыдущий вопрос, но, похоже, он работает не так, как ожидалось, по крайней мере для моего кода. Поэтому я хотел бы написать unit test, который проверяет, может ли конкретный экземпляр объекта быть мусором, собранным после запуска моего кода.
Можно ли сделать это надежным способом?
ИЗМЕНИТЬ
В настоящее время у меня есть следующий тест, основанный на ответе Павла Стовелла, который преуспевает:
[TestMethod]
public void ReleaseTest()
{
WindsorContainer container = new WindsorContainer();
container.Kernel.ReleasePolicy = new NoTrackingReleasePolicy();
container.AddComponentWithLifestyle<ReleaseTester>(LifestyleType.Transient);
Assert.AreEqual(0, ReleaseTester.refCount);
var weakRef = new WeakReference(container.Resolve<ReleaseTester>());
Assert.AreEqual(1, ReleaseTester.refCount);
GC.Collect();
GC.WaitForPendingFinalizers();
Assert.AreEqual(0, ReleaseTester.refCount, "Component not released");
}
private class ReleaseTester
{
public static int refCount = 0;
public ReleaseTester()
{
refCount++;
}
~ReleaseTester()
{
refCount--;
}
}
Правильно ли я полагаю, что, основываясь на вышеприведенном тесте, я могу заключить, что Windsor не будет утечки памяти при использовании NoTrackingReleasePolicy?