Domanda

Ho visto che @Transactional è meglio posizionato allo strato di servizio, ma il problema è che non sono in grado di testare correttamente i miei repository perché le modifiche non vengono impegnate.

Durante il test del metodo save() del repository, voglio utilizzare find() per verificare se l'entità è stata salvata correttamente, ma poiché le modifiche save() non vengono impegnate al database, find() restituisce NULL.

Le uniche soluzioni che vedo è aggiungere l'annotazione @Transactional:

    .
  • sul metodo repository save()
  • sul metodo testSave()=> Ma IMO questo è sbagliato perché modifica il comportamento

Forse sto fraintendendo qualcosa, ho iniziato ad imparare Java due giorni fa.

È stato utile?

Soluzione

Non è necessario che le modifiche commesse nel database hai solo bisogno delle query emesse nella stessa transazione.Successivamente non dovresti usare lo stesso mezzo con cui si memorizza i dati per recuperare i dati.Fondamentalmente dovresti usare JDBC semplice per testare se è stato aggiunto.

public class TestClass extends AbstractTransactionalSpringJUnit4ContextTests {

    private TestRepository repo; 

 @Test
 public void testSave() {
    int rowCount = countRowsInTable("your-table-name");
    repo.save(yourEntity);
    repo.flush(); 
    int rowCountAfter = countRowsInTable("your-table-name");
    assertTrue(rowCountAfter - rowCount == 1); // Or whatever you like to verify the row was added 
 }
.

Nota: se non si estende JpaRepository non è presente alcun metodo flush, invece è possibile iniettare il EntityManager in TestCase e chiamare flush su lì.

Invece di verificare solo il conteggio della riga che è possibile utilizzare anche il jdbcTemplate dal AbstractTransactionalJunit4SpringContextTests per recuperare la riga appena aggiunta e confrontare con ciò che ti aspettavi.

Altri suggerimenti

Ecco perché inizierai a testare i test dell'unità scrivendo il codice di produzione.Ma mentre hai iniziato a imparare Java solo due giorni fa, non dovresti davvero entrare nella gestione delle transazioni subito dal pipistrello.Impara prima le basi e il design.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top