1

我有一个奇怪的问题。升级到 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 有关吗?

在进一步调试时,我看到运行测试后上下文丢失了,并且在下一次测试的设置过程中,上下文为空。我不确定为什么会这样。

请帮忙!

4

1 回答 1

0

这个问题似乎发生在并行运行 Maven 测试时。这在春季 2.5.6 之前没有发生。但是,在 maven-test-surefire 插件中删除并行方法后,我没有遇到问题

于 2013-10-31T05:56:18.433 回答