Testes usando DAO Genérico, FactoryDAO e vRaptor 3

Olá Pessoal,
Estou com uma dúvida que está me impedindo de fazer alguns testes unitários, e acho q vocês matarão rápido.

Bem, na minha estrutura eu tenho uma DAO Generica e uma DAOFactory que injeto nos controllers do vRaptor3 qnd preciso, segue abaixo parte simplificada do código para melhor compreensão:

DAO:

public class DAO<T> {
	protected final Session session;
	private final Class classe;

	public DAO(Session session, Class classe) {
		this.session = session;
		this.classe = classe;
	}

	public void saveOrUpdate(T u){
		session.saveOrUpdate(u);
	}
...
}

DAOFactory:

@Component
public class DaoFactoryImpl implements DaoFactory{
...
	private Session session;

	public DaoFactoryImpl(Session session) {
		this.session = session;
	}
	public DAO<Analise> getAnaliseDAO() {
		return new DAO<Analise>(this.session, Analise.class);
	}
...
}

Controller:

@Resource
public class AnaliseController {

	private final Result result;
	private DaoFactory daoFactory;

	public AnaliseController(Result result, DaoFactory daoFactory) {
		this.result = result;
		this.daoFactory = daoFactory;
	}

	@Post
	@Path("/analise/salva")
	public void adiciona(Analise analise) {
		daoFactory.getAnaliseDAO().saveOrUpdate(analise);
		result.redirectTo(AnaliseController.class).lista();
	}
...
}

Teste:

public class AnaliseControllerTest {

	private Mockery mockery;
	private DaoFactory daoFactory;
	private AnaliseController controller;

	@Before
	public void setUp() throws Exception {
		mockery = new Mockery();
		daoFactory = mockery.mock(DaoFactory.class);
		Result result = new MockResult();
		controller = new AnaliseController(result, daoFactory);
	}

	@Test
	public void testaSeAdicionaAnalise() throws Exception {
		mockery.checking(new Expectations() {{
				???? one(daoFactory).getAnaliseDAO();
				???? will(returnValue(Class.class));
				????
			}});
		
		Analise analise = new Analise();		
		analise.setNome("teste");
		
		controller.adiciona(analise);
		mockery.assertIsSatisfied();
	}
}

Pergunta:
Como Efetuar um teste para o método “adiciona” de AnaliseController usando o JMock ?
Fiz umas tentativas frustradas aqui(tipo essa acima), e gostaria desse auxílio, por favor.
Percebam que o foco do teste está na linha que possui( getAnaliseDAO() ) do método adiciona.

Obrigado.

tenta fazer, dentro do Expectations:

Dao<?> dao = mockery.mock(Dao.class);
one(daoFactory).getAnaliseDAO();  
will(returnValue(dao));

one(dao).salva ...

ou vc pode mockar a Session, e passar um dao de verdade:

Session session = mockery.mock(Session.class);
Dao<Analise> dao = new Dao<Analise>(session, Analise.class);

Opa Lucas…
Considerando a tua dica, fiz o seguinte:

{ ... @Test public void testaSeAdicionaAnalise() throws Exception { mockery.checking(new Expectations() { { DAO&lt;Analise&gt; dao = (DAO&lt;Analise&gt;)mockery.mock(DAO.class); one(daoFactory).getAnaliseDAO(); will(returnValue(dao)); one(dao).saveOrUpdate(with(any(Analise.class))); } }); ... }

Mas como para a minha DAO eu não usei interface favor não me joguem pedras), eu precisei configurar o JMock para funcionar com classes, então, apenas segui mais detalhes em :http://www.jmock.org/mocking-classes.html.

Então apenas fiz:

	@Before
	public void setUp() throws Exception {
		mockery = new Mockery() {
			{
				setImposteriser(ClassImposteriser.INSTANCE);
			}
		};

		daoFactory = mockery.mock(DaoFactory.class);
		Result result = new MockResult();
		controller = new AnaliseController(result, daoFactory);
	}

E foi tudo certinho.

Novamente, tenquiu…

Wesley