Я работаю над фрагментом кода библиотеки около IDisposable
. Управляемый путь (через using
) легко проверяем. Я задаюсь вопросом о финализаторе: Должен ли вызывать System.GC.Collect()
, чтобы заставить финализатор работать?Как выполнить единичный тест IDisposable?
ответ
Нет, GC.Collect() вызов является асинхронным, вы также должны были бы назвать это:
System.GC.WaitForPendingFinalizers();
Не могли бы вы издеваться над интерфейсом IDisposable
и ожидать вызова Dispose
? Это, по крайней мере, позволит вам увидеть, когда объект фактически удален.
Я думаю, что я склоняюсь к делать финализац() вызвать другой метод, и тест, другой метод делает то, что вы хотите. Вы не получили бы 100% -ный охват кода, но, по крайней мере, вы знали бы, что метод правильно освобождает ресурсы объекта.
Я бы посмотрел на Dispose, Finalization, and Resource Management свою лучшую ссылку на эту тему, которую я знаю. Используя свой шаблон:
~ComplexCleanupBase()
{
Dispose(false);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected override void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
// dispose-only, i.e. non-finalizable logic
}
// new shared cleanup logic
disposed = true;
}
base.Dispose(disposing);
}
Вы завершаете с мертвыми простых Финалайзер/Dispose() методы и проверяемые Dispose (BOOL). Нет необходимости принудительно завершать работу или что-либо, используя класс GC.
- 1. Планировщик: выполнить единичный тест
- 2. Единичный тест iOS: как выполнить единичный тест firstResponderStatus
- 3. Maven Surefire: выполнить единичный тест
- 4. Как выполнить единичный тест на исключения?
- 5. Как выполнить единичный тест наследующих объектов?
- 6. Как выполнить единичный тест с задержкой?
- 7. Можно выполнить единичный тест без TDD?
- 8. Невозможно выполнить единичный тест - Unitils, Hibernate
- 9. Помощь! Не удалось выполнить единичный тест Sikuli
- 10. Как сбросить единичный тест?
- 11. Единичный тест доменаCollectionView
- 12. grails Как создать единичный тест
- 13. asp.net Единичный тест: отметьте тест как неполный
- 14. Как выполнить единичный тест для параметра Collection с возвратом коллекции?
- 15. Как мне выполнить единичный тест mapDispatchToProps в Redux?
- 16. Как явным образом выполнить единичный тест с использованием should.js
- 17. Как выполнить киевский единичный тест внутри обратного вызова JSON?
- 18. Как выполнить единичный тест сохранения файла на диск?
- 19. Java, BigDecimal: Как выполнить единичный тест для ошибок округления?
- 20. Как выполнить единичный тест с реагирующим компонентом apollo?
- 21. Как я могу выполнить единичный тест этого метода?
- 22. как выполнить единичный тест для шаблона Singleton с использованием jmockit
- 23. Как отправить уведомление, когда не удалось выполнить единичный тест?
- 24. Как выполнить единичный тест для конкретного поведения машины?
- 25. Как я могу выполнить единичный тест для hashCode()?
- 26. Robolectric - как отключить единичный тест?
- 27. Единичный тест в додзе
- 28. Единичный тест в VS2010
- 29. C# - Единичный тест, Mock?
- 30. Единичный тест с Mongoose
Если вы придерживаетесь предписанного шаблона для IDisposable, я уверен, что его тестирование будет полезным. – 2008-10-29 10:49:21
извините, это должно было быть «Я не уверен, что модульное тестирование будет таким полезным ... – 2008-10-29 10:58:53
@Mitch: реализация IDisposable правильно, так что управляемые и неуправляемые ресурсы удаляются в нужный момент не тривиально . Поскольку соответствующий код библиотеки отвечает за то, что я не вижу смысла в тестировании _not_, что ... – 2008-10-29 11:01:53