Модульный тест Java завершился неудачей из-за нулевого KeyHolderJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Модульный тест Java завершился неудачей из-за нулевого KeyHolder

Сообщение Anonymous »

Я создаю новые модульные тесты для приложения и застрял, потому что KeyHolder не возвращает действительный объект.
Для контекста, вот мои классы :
Класс ScriptDao:

Код: Выделить всё

@Repository
public class ScriptDao extends DefaultDao {

private static final Logger LOG = LoggerFactory.getLogger(ScriptDao.class);

public Long save(ScriptModel script) {
LOG.debug("saving script {}", script);

String sql = "INSERT INTO " + DBTable.SCRIPT + " (script_type_id, hash, content) " +
"VALUES(?, ?, ?)";

List queryParams = new LinkedList();
queryParams.add(script.getScriptType());
queryParams.add(script.getHash());
queryParams.add(script.getContent());

KeyHolder keyHolder = save(sql, queryParams);

return keyHolder.getKey() != null ? keyHolder.getKey().longValue() : null;
}
}
Класс DefaultDao:

Код: Выделить всё

@Repository
public class DefaultDao {

@Autowired
protected ObjectMapper jacksonObjectMapper;

@Autowired
protected JdbcTemplate jdbcTemplate;

public KeyHolder save(String sql, List queryParams) {
Object[] parameters = queryParams.toArray();
printSQL(sql);
printParams(queryParams);
KeyHolder keyHolder = new GeneratedKeyHolder();
int rowAffected = jdbcTemplate.update(getPreparedStatementCreator(sql, parameters), keyHolder);
getLogger().debug("operation successfully completed on {} rows", rowAffected);
return keyHolder;
}
}
Тестовый пример:

Код: Выделить всё

@ExtendWith(MockitoExtension.class)
@MockitoSettings(strictness = Strictness.LENIENT)
public class ScriptDaoTest {

@InjectMocks
private ScriptDao scriptDao;

@Mock
private JdbcTemplate jdbcTemplate;

@Mock
private SqlRowSet sqlRowSet;

@Mock
private DefaultDao defaultDao;

@Test
void testSaveMethod() {
ScriptModel script = new ScriptModel();
script.setScriptType(1);
script.setHash("hash123");
script.setContent("content");

Map keyMap = new HashMap();
keyMap.put("", 1L);

KeyHolder keyHolder = new GeneratedKeyHolder();
List generatedKeys = keyHolder.getKeyList();
generatedKeys.clear();
generatedKeys.add(keyMap);

when(defaultDao.save(anyString(), anyList())).thenReturn(keyHolder);

Long result = scriptDao.save(script);

assertEquals(1L, result);
}
}
Когда я запускаю модульный тест, он терпит неудачу в AssertEquals со следующим сообщением:

Код: Выделить всё

org.opentest4j.AssertionFailedError:
Expected :1
Actual   :null


at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151)
at org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132)
at org.junit.jupiter.api.AssertEquals.failNotEqual(AssertEquals.java:197)
at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:182)
at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:177)
at org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:639)
at com.xxxxxxx.daos.ScriptDaoTest.testSaveMethod(ScriptDaoTest.java:62)
at java.lang.reflect.Method.invoke(Method.java:498)
at java.util.ArrayList.forEach(ArrayList.java:1259)
at java.util.ArrayList.forEach(ArrayList.java:1259)

Process finished with exit code -1
Я добавил несколько сообщений журнала в тестовый пример и вижу, что keyHolder имеет правильное значение, но похоже, что это defaultDao.save() не использует keyHolder, определенный в модульном тесте.
Я ожидал, что мой AssertEquals будет истинным, как KeyHolder в модульном тесте было жестко закодировано как 1.

Подробнее здесь: https://stackoverflow.com/questions/786 ... -keyholder
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»