测试是否在Spring DataJpaTest中加载了一个集合

时间:2018-01-18 12:55:05

标签: spring-boot spring-data-jpa

我在测试是否在Spring DataJpaTest中加载了一个集合时遇到了麻烦。

为此,我创建了一个具有id和项目列表的实体,如下所示。该列表应该是延迟加载的(因此我假设它不应该在测试中加载)。

@Data
@Entity
@Table(name = "examples")
public class Example {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  protected Long id;

  @OneToMany(mappedBy = "example", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
  private List<ExampleElement> collection;

}

存储库代码如下所示:

@Repository
public interface ExampleRepository extends PagingAndSortingRepository<Example, Long> {

  @Query("SELECT e FROM Example e")
  List<Example> findAllActive();

}

在测试中,我正在创建一个新的Example实体,生成集合,将实体保存到数据库,然后从数据库中获取实体并检查集合是否已初始化。 测试代码如下所示:

@RunWith(SpringRunner.class)
@DataJpaTest
@AutoConfigureTestDatabase(replace = Replace.NONE)
public class ExampleRepositoryTest {

  @Autowired
  private ExampleRepository repository;

  @Test
  public void myTest() {
    Example example = new Example();
    example.setCollection(Utils.generateCollection()))
    repository.save(example);

    List<Example> actives = repository.findAllActive();

    // tests in a loop whether the collection is initialized which should return false
  }

我尝试了以下内容:

  • 使用em.getEntityManager().getEntityManagerFactory().getPersistenceUnitUtil()注入TestEntityManager并从那里获取PersistenceUnitUtil并调用isLoaded(actives.get(0).getCollection())isLoaded(actives.get(0), "collection")方法 - 都返回true
  • 调用Hibernate.isInitialized(actives.get(0).getCollection())Hibernate.isPropertyInitialized(actives.get(0), "collection")方法,两者都返回true。
  • 检查集合包含的内容 - 它是包含元素的PersistentBag。我希望它是null。

我错过了什么?

0 个答案:

没有答案