我有一个奇怪的问题。升级到 Spring 3 和 junit 11 后,测试没有按预期工作。
当我从 intellij 单独运行测试时,一切正常。但是在通过 Maven 运行时,测试在自动装配时失败。这也是不一致的。测试类运行中的第一个测试获取自动装配的类并运行,但下一个测试因自动装配的 bean 上的空指针异常而失败
这是测试类:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:dao-export-test.xml", "classpath:jndidatasource-config.xml"})
@TransactionConfiguration(transactionManager = "transactionManager.console", defaultRollback = true)
@TestExecutionListeners({
DependencyInjectionTestExecutionListener.class,
DirtiesContextTestExecutionListener.class,
TransactionalTestExecutionListener.class
})
@Transactional
public class ActivityLogDaoTest {
private final Logger logger = Logger.getLogger(getClass());
ActivityLog activityLog;
@Autowired
private ActivityLogDao activityLogDao;
private static final String CUSTOMER_KEY = "king-kong-systems";
@Before
public void setUp() {
activityLog = new ActivityLog();
activityLog.setReferenceId(2000L);
activityLog.setAmount(BigDecimal.TEN);
activityLog.setCustomerKey(CUSTOMER_KEY);
activityLog.setSource(ActivityLogSource.BALANCE_LINE_ITEM);
activityLog.setType(ActivityType.UNKNOWN);
activityLog.setDescription("Initial purchase for server blades at rackspace");
}
@Test
public void testAddNewLogRecord() {
logger.info("Adding new record to activity log");
try {
activityLogDao.createLogEntry(activityLog);
Assert.assertTrue(true);
} catch (Exception e) {
Assert.assertTrue(false);
}
}
@Test
public void testGetLogsForMerchant() {
logger.info("Get new record for merchant");
//add two records
}
xml配置为:
<context:spring-configured/>
<context:annotation-config/>
<bean id="activityLogDao" class="com.core.dao.hibernate.ActivityLogDaoImpl" parent="baseDao.console">
<property name="databaseToUse" value="SNAPSHOT"/>
</bean>
当测试通过 intellj 时,调试变得越来越困难,当我在测试类中只有一个测试时通过了;但是当我进行另一次测试时,它在自动装配上失败了。可能与@Transactional 有关吗?
在进一步调试时,我看到运行测试后上下文丢失了,并且在下一次测试的设置过程中,上下文为空。我不确定为什么会这样。
请帮忙!