Quelle est la différence entre @Autocâblés et de l'obtention de la fève de contexte de l'application?

J'ai un dao de test de l'unité qui est déclarée comme suit:

@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);

Quand je lance le test de l'unité, tous les pass et je peux voir la db se recrée entre l'unité de test exécutions.

Mon test db est définie comme suit:

    <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>

Mais quand j'ai changer mon test @Autocâblés, définis ci-dessous, il n'exécute pas l'init db scripts.

@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;

Je ne vois pas quelle est la différence. J'ai deux applicationContext.xmls, l'un dans la principale et l'autre dans le test (si je peux remplacer la db avec le test db)

Pour moi, il faut exécuter la même. Ai-je raté quelque chose?

Merci,

Où est votre IRegisterDao défini dans le fichier xml? pouvez vous s'il vous plaît le partager?

OriginalL'auteur Eric | 2012-02-13