我想测试创建的实体是否已正确保存到数据库。有一个create方法的服务集成测试:
@SpringApplicationContext({"setting ...."})
public class PersonServiceIntegrationTest extends UnitilsJUnit4 {
@SpringBeanByName
private PersonService personService;
@Test
public void createPerson() {
String name = "Name";
String sname = "Surename";
DtoPerson item = personService.createPerson(name, sname, Arrays.asList( new DtoAddress("Pisek","CZE", true), new DtoAddress("Strakonice", "CZE", false) );
Assert.notNull("Cannot be null", item);
/*
* This assertion fails because of transaction (I suppose) - item is not in
* database right now.
* Why? Returned dto 'item; is not null?
*/
//domain with all fetched related entities, eg. address
Person p = personService.getPerson(item.getIdPerson());
List<Address> addresses = p.getAddresses();
Assert.notNull("Cannot be null", p);
Assert.notNull("Cannot be null", addresses);//return collection of Address
Assert.notFalse("Cannot be emtpty", addresses.isEmpty());
ReflectionAssert.assertPropertyLeniens("City", Arrays.asList("Pisek", "Strakonice"), addresses);
}
}
如果我使用hibernate,是否有必要测试创建实体?有人可以写你尝试测试低级别的休眠,但是hibernate有自己的测试。上面有一个简单的代码,但我可以想象一些特定的代码,它们同时存在更多的entites(例如,one-many加上几个one-one关系)。我想测试关系是否已正确保留。
有这样的模式吗?我有一个问题,该记录不在数据库中。我不想使用返回的dto(它只提供agregate root实体 - person,但它没有说人基本数据(one-many),person地址(one-many)等。)...我想要得到坚持记录。
答案 0 :(得分:0)
我测试持久性的方法是:
所以我很确定映射或多或少是正确的,并且每个东西都会被持久化
答案 1 :(得分:0)
我决定为创造人重做服务方法。
测试将简单而且只会解决自己的责任。 : - )
正如@ Ralph在他的回答中的评论中所说 - 这个测试用例不是关于服务层。有必要测试域层。还有一个我不在集成测试中使用的新想法 - 测试有自己的hibernate会话。