как смоделировать класс, который вызывает синглтон-класс, используя junit - PullRequest
4 голосов
/ 01 мая 2011

Я хотел бы протестировать метод из class1, который вызывает одноэлементный класс getInstance:

Class ivDomain {

    public String method1() {

        id=Singleton.getInstance().generateId()

        ... code

    }

}

Когда я делаю тест с использованием Junit, я получаю NullPointerException на синглтон-классе. Как я могу это исправить?

Ответы [ 4 ]

4 голосов
/ 01 мая 2011

Классы, использующие статически доступные синглтоны, являются трудной проверкой.Измените свой класс ivDomain на , возьмите экземпляр singleton в качестве параметра его конструктора и затем смоделируйте его обычным образом.Вы должны использовать платформу Dependency Injection (например, Guice ), чтобы упростить этот стиль разработки.

1 голос
/ 01 мая 2011

Наиболее вероятная причина - без проверки кода вашего Singleton - в том, что при его инициализации не удается загрузить какую-либо внешнюю конфигурацию и, следовательно, происходит сбой.

Синглеты в автоматических модульных тестах могут быть проблемой, поскольку иногда вам нравится, что они ведут себяиначе для конкретного сценария, который вы тестируете (например, вам нужен один сценарий, где generateId возвращает -1, другой - когда он возвращает 4354353, а другой - когда выдает RuntimeException - просто чтобы вы могли увидеть, как работает код, использующий Singleton.В таких случаях рекомендуется смена дизайна, так как синглтоны не входят в число рекомендуемых шаблонов проектирования и в некоторой степени рассматриваются как анти-шаблоны.

1 голос
/ 01 мая 2011
1 голос
/ 01 мая 2011

Вы не должны издеваться над Синглтоном;просто измените код, чтобы getInstance() не возвращал ноль.

...