【发布时间】:2017-05-22 14:43:29
【问题描述】:
我有很多 DAO 类需要在 Spring 项目中进行测试。
我已经在使用 DBUnit 来模拟我的数据库,但是我使用 @Before 注释来创建对象并在对创建/更新/删除操作进行测试之后比较它们。
@DatabaseSetup(value = { "/db_data/dao/common.xml", "/db_data/dao/myDAOCommonTest.xml" })
@DbUnitConfiguration(dataSetLoader = ReplacementDataSetLoader.class)
public class MyDAOImplTest extends AbstractDaoTU {
@Autowired
private MyDAO myDAO;
private Set<ClassNeeded> objectsNeeded = new HashSet<>();
private ClassOne classOne;
private ClassTwo classTwo;
private ClassThree classThree;
@Override
public void setUp() throws Exception {
super.setUp();
this.objectsNeeded.add(somethingComingFromTheMotherClass);
this.classOne = new ClassOne();
this.classOne.setIdClassOne(1L)
this.classOne.setObjectsNeeded(this.objectsNeeded);
// ... Many other sets
this.classTwo = new ClassTwo();
this.classTwo.setIdClassTwo(1L);
this.classTwo.setClassOne(this.classOne);
// ... Many other sets
// ... Other sets follow for a lot of other objects
}
@Test
public void testOne {
// ...
}
// ... Other tests follow
}
我正在使用 ORM(在这种情况下为 Hibernate),并且大多数对象是相互依赖的。我的 dao 函数大多需要完整的对象才能被调用,所以我必须在测试之前创建对象。
我的问题如下:
- 是否有更好的方法来对 DAO 进行单元测试?
- 您知道哪些工具可以使编写更容易/更快? (我使用maven进行打包)
感谢您的帮助!
【问题讨论】:
-
这不完全是问题,但确实是一个好点。我有时会根据非常具体的需要更改测试中的一些对象属性值,所以我不使用@BeforeClass。这是一个不好的做法吗?我想无论如何我都会调查它,并移动在 BeforeClass 方法中会更好的对象。感谢您的建议。
-
哦,好吧,我想我们误会了。我的意思是写得更快。我知道BeforeClass。由于这是我加入的一个大项目,我尝试遵循我之前使用的做法。不过,我确信这不是一个坏习惯,但我会尝试使用它。再次感谢。
标签: java hibernate unit-testing junit