Tôi có một bài kiểm tra đơn vị dao được khai báo như sau:Sự khác biệt giữa @Autowired và nhận được một bean từ ngữ cảnh ứng dụng là gì?
@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);
Khi tôi chạy thử nghiệm đơn vị, tất cả các đường chuyền và tôi có thể thấy db việc tái tạo ở giữa hành đơn vị kiểm tra.
db thử nghiệm của tôi được định nghĩa như sau:
<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>
Nhưng khi tôi thay đổi thử nghiệm của tôi để sử dụng @Autowired, định nghĩa dưới đây, nó không thực hiện các script init 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;
Tôi không thấy sự khác biệt là gì. Tôi có hai tệp applicationContext.xml, một trong tệp chính và một trong thử nghiệm (vì vậy tôi có thể ghi đè lên db với db kiểm tra)
Với tôi, nó sẽ thực thi như vậy. Tui bỏ lỡ điều gì vậy?
Cảm ơn,
IRegisterDao của bạn được xác định trong tệp xml ở đâu? bạn có thể chia sẻ điều đó không? – Nomad