Вчера послушал 19й Подкаст Петербургской Группы Alt.Net. Ребята так сильно пинали несчастный Singleton, что я решил написать пару слов в его защиту. Одним из недостатков синглтона назвали то, что очень трудно, если вообще возможно, писать юнит тесты для классов использующих синглтон. Я попробую опровергнуть это утверждение.
Давайте рассмотрим простенький пример. У нас есть класс TextProvider, который имплементит интерфейс ITextProvider и при этом является синглтоном.
public interface ITextProvider { string GetText(); } public sealed class TextProvider : ITextProvider { private static readonly ITextProvider _instance = new TextProvider(); private TextProvider() { } public static ITextProvider Instance { get { return _instance; } } public string GetText() { return "Hello from Singleton!"; } }
Классу Client, который использует наш синглтон, вообще говоря совсем не обязательно знать что он работает именно с синглтоном. Client просто получает в конструктор ссылку на интерфейс и дальше работает именно с ней.
public class Client { private ITextProvider _textProvider; public Client(ITextProvider provider) { _textProvider = provider; } public void ConsumeText() { _textProvider.GetText(); } }
Теперь создать новый экземпляр клиента в коде можно вот так:
Client client = new Client(TextProvider.Instance);
А в тестах клиенту можно подсунуть замоканого провайдера:
ITextProvider provider = _mock.StrictMock<ITextProvider>(); Client client = new Client(provider);
3x8 sheet metal prices near me - TITanium Arts
ReplyDeleteA 3x8 sheet metal prices properties of titanium near me, titanium quartz crystal TITanium Arts, is a digital artwork studio 바카라 게임 사이트 created in 2007, in titanium linear compensator recognition of the use of microtouch titanium trim high quality natural light
j759q7kpjhh345 dog dildo,bulk sex dolls,sex toys,masturbators,sex chair,penis pumps,couples sexy toys,dog dildos,sex toys h937q1frbwb218
ReplyDelete