我在为使用Spring Data存储库和Daly生成类的服务编写单一测试时遇到问题。
在这个测试中,我正在模拟Spring Data存储库。 但是在我的存储库中,我使用Daly生成的类来获取实体字段的名称。我的测试失败,因为我的Daly生成的类上的公共静态SingularAttribute字段未初始化。
当我进行集成测试并加载Spring和Hibernate时,这不会发生。我假设当Spring启动时,它会在@StaticMetamodel注释的所有类上生成hibernate填充字段。
我想知道在Junit测试开始时是否有一种简单的方法来填充这些字段而不用手工制作?
也许某些代码会让我的问题更清晰:
我的实体名为PageHits,它关联的daly生成的类是PageHits _:
import javax.annotation.Generated;
import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.StaticMetamodel;
@Generated(value="Dali", date="2015-10-23T10:07:28.339+0200")
@StaticMetamodel(PageHits.class)
public class PageHits_ {
public static volatile SingularAttribute<PageHits, PagePK> pagePK;
public static volatile SingularAttribute<PageHits, Integer> numHits;
}
这是我在服务上测试的方法:
@Transactional
public List<PageHits> getMostViewedPage(String baseUrl, int num) {
Pageable pageable = new PageRequest(0, num, Sort.Direction.DESC, PageHits_.numHits.getName()); //it fail here because PageHits_.numHits is null
//pageHitsRepository is mocked when running the code
return pageHitsRepository.findByBaseUrl(baseUrl, pageable).getContent();
}