gpt4 book ai didi

unit-testing - AbstractTransactionalJUnit4SpringContextTests : can't get the dao to find inserted data

转载 作者:行者123 更新时间:2023-12-02 02:34:33 26 4
gpt4 key购买 nike

我正在尝试使用 AbstractTransactionalJUnit4SpringContextTests 基类设置集成测试。我的目标非常简单:使用 simpleJdbcTemplate 将一些数据插入数据库,使用 DAO 将其读回,然后回滚所有内容。 JPA->Hibernate 是持久层。

为了测试,我创建了一个没有外键的数据库版本。这应该通过减少每次测试的夹具设置量来加快测试速度;在这个阶段,我对测试数据库完整性不感兴趣,只对我的 HQL 中的业务逻辑感兴趣。

/* DAO */

@Transactional
@Repository("gearDao")
public class GearDaoImpl implements GearDao {
@PersistenceContext
private EntityManager entityManager;

/* Properties go here */

public Gear findById(Long id) {
return entityManager.find(Gear.class, id);
}
}

/* Test Page */

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/com/dom/app/dao/DaoTests-context.xml"})
@TransactionConfiguration(transactionManager="transactionManager", defaultRollback=false)
public class GearDaoImplTests extends AbstractTransactionalJUnit4SpringContextTests {

@Autowired
private GearDao gearDao;

@Test
@Rollback(true)
public void quickTest() {
String sql;
// fields renamed to protect the innocent :-)
sql = "INSERT INTO Gear (Gear_Id, fld2, fld3, fld4, fld5, fld6, fld7) " +
" VALUES (?,?,?,?,?,?,?)";
simpleJdbcTemplate.update(sql, 1L, 1L, 1L, "fld4", "fld5", new Date(), "fld7");
assertEquals(1L, simpleJdbcTemplate.queryForLong("select Gear_Id from Gear where Gear_Id = 1"));
System.out.println(gearDao);

Gear gear = gearDao.findById(1L);
assertNotNull("gear is null.", gear); // <== This fails.
}
}

该应用程序(一个 Spring MVC 站点)可以与 DAO 一起正常工作。会发生什么?我应该从哪里开始寻找解决方案?

  1. DAO 以某种方式拥有与 simpleJdbcTemplate 不同的数据源。但不确定会怎样,因为在 DaoTests-context.xml 文件中只定义了一个数据源。
  2. Hibernate 要求所有外键关系都存在才能选择 Gear 对象。有几个连接不存在,因为我在 fld2/fld3/fld4 中对它们进行硬编码.
  3. DAO 不会对未提交的数据执行操作。但是为什么 simpleJdbcTemplate 会遵守这一点?我假设他们都做同样的事情。
  4. 内裤侏儒。但是利润在哪里?

最佳答案

几个小时的 sleep 有多么不同。我醒来并想“我应该检查日志以查看实际正在执行的查询。”当然,事实证明 hibernate 被配置为为一些外键生成一些内部连接。一旦我提供了这些依赖项,它就像一个魅力。

我喜欢每个测试概念的自动回滚。集成测试,我来了!

关于unit-testing - AbstractTransactionalJUnit4SpringContextTests : can't get the dao to find inserted data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2377763/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com