2013-05-24 5 views
4

Мне интересно, как я делаю тесты с CDI. и насмешливые классы во время инъекции.Тестирование с CDI, насмешливая фаза

, если у меня есть класс:

@Named 
@RequestScoped 
public class ItemProcessor { 

    @Inject 
    private ItemDao itemDao; 


    public void execute() { 


    List<Item> items = itemDao.fetchItems(); 
    for (Item item : items) { 
     System.out.println("Found item " + item); 
    } 
    } 
} 

Как мне делать, если я хочу, чтобы дразнить класс ItemDao во время испытания, когда я хочу, чтобы проверить мой ItemProcessor?

ответ

2

Вы можете, например, использовать CDI «Альтернативы».

@Alternative 
public class TestCoderImpl implements Coder { ... } 

Теперь этот компонент будет использоваться, только если он указан в вашем beans.xml в качестве альтернативы.

<alternatives> 
    <class>package.TestCoderImpl</class> 
</alternatives> 

Далее info.

+0

Могу ли я иметь свой обычный компонент без аннотации @Alternative и просто выполнять во время теста? – Trind

+1

Несомненно, ваш обычный боб не будет иметь @Alternative аннотации, ваш тестовый компонент будет иметь его. Вы можете активировать свой альтернативный bean-компонент, разместив указанный тег в beans.xml. – Csaba

+0

Спасибо за помощь :) – Trind

4

Каркасов, как Mockito, можно установить зависимости для насмехающегося даже при использовании инъекции поля: http://docs.mockito.googlecode.com/hg/latest/org/mockito/InjectMocks.html

В целом, однако, инъекции конструктора является предпочтительным для этой точной причины: тестируемость.

+1

Спасибо за помощь, но где больше ищет то, что сделал Csaba. – Trind

+0

Я думаю, что ваш комментарий о инъекции конструктора - лучшая часть этого ответа. – Pete

Смежные вопросы