Search code examples
javajava-ee-6cdijboss-weldweld

Testing with CDI, mocking a bean


I am wondering how i am doing tests with CDI. and mocking classes during injection.

if i have the class:

@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);
    }
  }
}

How do i do if i want to mock the ItemDao class during test, when i want to test My ItemProcessor ?


Solution

  • You could - for example - use CDI "Alternatives".

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

    Now, this bean will only be used if it is declared in your beans.xml as an alternative.

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

    Further info.