У меня есть класс, подобный следующему:
class A
{
public method doSomething()
{
//....
DAO dataAccessor = new DAO();
List<Object> result1 = dataAccessor.getData(dataAccessor.getSql1());
List<Object> result2 = dataAccessor.getData(dataAccessor.getSql2());
//.. do some stuff with the results
}
Теперь я использую jMockit для тестирования вышеуказанной функции, высмеивая класс DAO
.
Вот какмой тестовый класс выглядит так:
class A_Test
{
private A myAClass;
@Mocked DAO mockedDAO;
List<Object> resultToSql1, resultToSql2;
// ... Some initializations...
@Test
public void testDoSomething()
{
new NonStrictExpectations()
{
mockedDAO.getSql1(); result = "SQL1";
mockedDAO.getData(withEqual("SQL1")); result = resultToSql1;
mockedDAO.getSql2(); result = "SQL2";
mockedDAO.getData(withEqual("SQL2")); result = resultToSql2;
};
myAClass.doSomething();
}
}
Теперь кажется, что второе ожидание относительно getData()
маскирует первое, то есть фиктивный объект ведет себя так, как будто я никогда не объявлял первые строки в ожидании (те, которые обрабатывают sql1
):
Первый вызов getData()
возвращает пустую коллекцию вместо значений, с которыми я инициализировал resultToSql1
.Второй вызов возвращает resultToSql2
, как и ожидалось.
Если я прокомментирую следующую строку:
mockedDAO.getData(withEqual("SQL2")); result = resultToSql2;
, первый вызов возвращает то, что я определил - resultToSql1
, а второй возвращаетпустая коллекция.Это имеет смысл.
Итак, что я делаю не так?? Как определить два различных возвращаемых значения из getData()
на основе параметров вызова?
Любая помощь будет оценена.
Спасибо!