Для контекста, вот мои классы :
Класс 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;
}
}
Код: Выделить всё
@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);
}
}
Код: Выделить всё
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
Я ожидал, что мой AssertEquals будет истинным, как KeyHolder в модульном тесте было жестко закодировано как 1.
Подробнее здесь: https://stackoverflow.com/questions/786 ... -keyholder