Seam Component.getInstance () и модульное тестирование - PullRequest
0 голосов
/ 11 марта 2011

Я звоню Component.getInstance(Needed.class) в конструкторе одного из моих классов, который не является компонентом шва. Это работает просто отлично, но я пытаюсь покрыть это юнит-тестами и получаю IllegalStateException в приведенной выше строке. Есть ли способ покрыть Component.getInstance тестами?

Кстати, я использую библиотеку unitils ... Заранее спасибо

1 Ответ

1 голос
/ 11 марта 2011

Вы используете шаблон Service Locator в своих классах, который плохо подходит для модульного тестирования. Попробуйте перейти к шаблону Dependency Injection . Это делает модульное тестирование намного проще.

Пример сервисного локатора:

public class MyService : Service
{
    private Needed dependency;

    public MyService()
    {
        this.dependency = 
            Component.getInstance(Needed.class);
    }
}

Пример внедрения зависимости:

public class MyService : Service
{
    private Needed dependency;

    public MyService(Needed dependency)
    {
        this.dependency = dependency;
    }
}

При внедрении зависимостей ваш класс не будет иметь никаких ссылок на контейнер (Component в вашем случае), что значительно упрощает юнит-тестирование класса.

...