In un test JUnit nella mia applicazione Spring, vorrei inserire molti dati in un metodo di installazione, quindi utilizzarlo per testarlo. Tuttavia, tutto ciò avviene nel metodo @Before
sembra essere il rollback dopo ogni prova, anche se io annotare il metodo con @Rollback(false)
@Rollback (false) non funziona su @Prima di utilizzare SpringJUnit4ClassRunner
Ecco una versione semplificata di quello che sto cercando di fare:
public class TestClass
{
@Autowired
MyService service;
@Before
public void setup()
{
if(service.getById(1) == null)
{
Thing thing = new Thing();
thing.setId(1);
service.create(new Thing(1))
}
}
}
Ho anche provato a utilizzare @BeforeClass
, ma questo richiede che il metodo sia statico e viene eseguito prima che vengano chiamati tutti i metodi di settaggio @Autowired
, quindi non riesco ad accedere ai servizi che devo chiamare quando viene eseguito il numero di serie @BeforeClass
.
Ho provato a utilizzare @PostConstruct
, ma ci sono problemi con l'avere una transazione disponibile (e la mia configurazione è tale che una sessione di Hibernate è disponibile solo all'avvio di una transazione). Stranamente sembrava che una sessione fosse disponibile, ma due oggetti ricavati dalla stessa sessione non erano uguali, il che significava che la cache di primo livello di Hibernate sembrava fallire, o che ogni operazione avveniva in una sessione separata. @BeforeTransaction
sembra mostrare lo stesso comportamento.
Dove hai inserito l'annotazione '@ Rollback', a livello di classe o di metodo? – Ralph
@Ralph Ho provato entrambi sul metodo 'setup()' '@Rollback (false)', e poi anche sulla classe, annotando anche i metodi di test con '@ Rollback'. –
Hai mai trovato un modo per raggiungere questo obiettivo? – Arjan