我想测试,如果创建的实体已经正确地持久化到database.There是创建方法的服务集成测试:集成测试策略的创建方法
@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);
}
}
是否有必要测试创建实体如果我使用休眠?有人可以写你尝试测试低级别的休眠,但休眠有自己的测试。上面有一个微不足道的代码,但我可以想象一些特定的代码在同一时间持续更多的实体(例如,一对多加几个一对一关系)。我想测试关系是否正确持续。
有没有一种模式来测试这种方式?我有一个问题,那个记录不在数据库。我不想使用返回的dto(它只提供了根集合的实体 - 人,但它没有说人的基本数据(一对多),人的地址(一对多)等)。我想获得持久记录。
存在问题。 Dao层不允许服务层和服务层不允许我获取实体管理器,因此无法调用实体管理器API。我决定为人员重做服务层级并分工负责。 – tomascejka 2013-02-27 05:43:42
该测试涉及到dao层和域对象。没有涉及服务层。 - 无论如何,我认为严格的分层与主代码相关,但与测试代码无关。 – Ralph 2013-02-27 06:19:14
“_this测试与dao层和域对象有关_” - 好的,现在我明白了你的答案....“_Anyway我认为严格的分层与主代码相关,但与测试代码无关。” - 它是有趣。如果我已经正确理解了第二句,那么测试将拥有自己的hibernate会话(并且不要使用服务层来加载数据)来测试例如。这个测试用例。对? – tomascejka 2013-02-27 12:10:20