我有实体,例如Product
聚合其他实体,例如Category
。这些实体也可以聚合其他实体等。现在我需要测试我对数据库的查询。
对于简单的CRUD,我会创建模拟EntityManager
。但是,如果我有更复杂的查询,我需要测试正确的功能。然后我可能需要持久化实体(或更多)并尝试检索/更新,无论如何。我还需要保留Product
所依赖的所有实体。
我不喜欢这样的做法。测试此类查询的最佳方法是什么?
感谢您的回复。
更新 - 示例
让我们假设以下实体结构
此结构由JPA实现维护。例如,Product
类看起来像这样
@Entity
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
@ManyToOne
private Category category;
@ManyToOne
private Entity1 something;
}
现在,如果我想测试DAO中使用的任何查询,我需要在数据库中创建Product
,但它依赖于Category
和Entity1
并且@ManyToOne
}注释,因此值不能是null
。所以我也需要坚持这些实体,但它们也有依赖关系。
我正在考虑在使用SQL脚本或dbunit(由@chalimartines提到)进行测试之前预先创建Category
,Entity1
和Entity2
等实体,这样可以节省大量代码,但我不知道这是否是一个好的解决方案。我想知道一些这种测试的最佳实践。
答案 0 :(得分:1)
我不知道其他方式,但是为了保留Product及其依赖项,您可以使用可帮助您设置数据库数据的测试框架DBunit。
答案 1 :(得分:1)
您可以使用@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
作为
@ContextConfiguration(locations={"classpath:/path/to/your/applicationContextTest.xml"})
@RunWith( SpringJUnit4ClassRunner.class)
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
public class YourClassTest {
@Test
public void test() {
//your crud
}
}
<强>更新强>
您不能将dependecies设置为null以避免持久化