Синглтон через enum против дизайна для теста

enum Singleton {
    INSTANCE;

    private static final TimeUnit TIME_UNIT = TimeUnit.HOURS;
    void doStuff()
}

В модульном тесте TIME_UNIT должно быть например TIMEUnit.MILLISECONDS, В синглтоне без enum я бы переместил TIME_UNIT конструктору, и пусть он будет передан ко времени создания. Это типичный способ написания тестируемого кода. Я знаю многих людей, которым нравится шаблон enum Singleton, и на самом деле он надежен и выглядит достаточно чистым для меня, но как достичь тестируемости?

Этот, кажется, в порядке, но нет строгого принуждения к использованию INSTANCE вместо INSTANCE_FOR_TEST в производственном коде:

enum TestableSingleton {
    INSTANCE(TimeUnit.HOURS),
    INSTANCE_FOR_TEST(TimeUnit.MILLISECONDS);

    private final TimeUnit TIME_UNIT;
    TestableSingleton(TimeUnit unit) {
        TIME_UNIT = unit;
    }
    void doStuff()
}

0 ответов

Другие вопросы по тегам