que tienen una prueba de unidad DAO que se declara como sigue:¿Cuál es la diferencia entre @Autowired y obtener un bean del contexto de la aplicación?
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring/applicationContext.xml"})
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
@Transactional
public class RegisterDaoTest extends AbstractTransactionalJUnit4SpringContextTests {
ApplicationContext applicationContext = new FileSystemXmlApplicationContext("classpath:/spring/applicationContext.xml");
private IRegisterDao registerDao = applicationContext.getBean(IRegisterDao.class);
Cuando ejecuto la prueba unitaria, todo pasa y puedo ver la db siendo recreada en el medio ejecuciones de pruebas unitarias.
Mi db prueba se define de la siguiente manera:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
<property name="url" value="jdbc:hsqldb:mem:test;sql.syntax_ora=true;create=true"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</bean>
<jdbc:initialize-database data-source="dataSource" ignore-failures="DROPS">
<jdbc:script location="file:Artifacts/Hsql Version Scripts/install/droptables.sql" separator=";"/>
<jdbc:script location="file:Artifacts/Hsql Version Scripts/install/install.sql" separator="/;"/>
</jdbc:initialize-database>
Pero cuando cambio mi prueba a utilizar @Autowired, se define a continuación, que no ejecuta los scripts de inicio db.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring/applicationContext.xml"})
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
@Transactional
public class RegisterDaoTest extends AbstractTransactionalJUnit4SpringContextTests {
/*
ApplicationContext applicationContext = new FileSystemXmlApplicationContext("classpath:/spring/applicationContext.xml");
private IRegisterDao registerDao = applicationContext.getBean(IRegisterDao.class);
*/
@Autowired
private IRegisterDao registerDao;
No veo cuál es la diferencia. Tengo dos applicationContext.xmls, uno en el principal y el otro en la prueba (para poder anular el db con la prueba db)
Para mí, debería ejecutar lo mismo. ¿Me estoy perdiendo de algo?
Gracias,
¿Dónde se define su IRegisterDao en el archivo xml? puedes por favor compartir eso? – Nomad