当前位置: 首页 > 知识库问答 >
问题:

当想要访问jUnit测试中的惰性加载集合时,空指针异常

钱峻
2023-03-14

在我的Spring应用程序中,我有两个实体:

@Entity
public class Category {
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private int id;
      ....
  @OneToOne
  @Cascade({CascadeType.ALL})
  @JoinColumn(name="page_id")
  private Page page;

  @OneToMany(fetch=FetchType.LAZY, mappedBy="category")
  private List<Shop> shop;

      ..getters and setters
 }

  @Entity
  public class Shop {

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private int id;
      ....

  @OneToOne(mappedBy="shop")
  private Settings settings;


  @ManyToOne
  @Cascade({CascadeType.SAVE_UPDATE})
  @JoinColumn(name = "category_id")
  private Category category;

  @OneToOne
  @Cascade({CascadeType.ALL})
  @JoinColumn(name = "page_id")
  private Page page;
      ...getters and setters

}

在我的测试jUnit中,我添加了一些类别和一些带有这个类别的商店,当我想访问当前类别的商店列表时,我有一个错误java。lang.NullPointerException。。。。

我的测试:

@ContextConfiguration(locations = {
    "classpath:security-context.xml",
    "classpath:dao-context.xml"
})
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@TransactionConfiguration(transactionManager="transactionManager", defaultRollback=false)
@Transactional
public class CategoryTest { 

Shop shop1 = new Shop(....);
Shop shop1 = new Shop(....);
Category category1 = new Category(....);
Category category2 = new Category(....);

@Test
public void someTest(){
    shop1.setCategory(category1);
    shop2.setCategory(category2);
    shopService.add(shop1);
    shopService.add(shop2);
    assertEquals(2, shopService.getAllShop().size());
    assertEquals(2, categoryService.getAllShop().size());
      //IN THIS LINE I HAVE A ERROR
    assertEquals(1, categoryService.getCategory(category1.getId()).getShop().size());
   }
 }

为了访问我添加到我的网站的惰性阿曲布他。xml过滤器:org。springframework。奥姆。冬眠3。支持OpenSessionInViewFilter在前端应用程序中正常工作,而不是在jUnit测试中<我犯了哪一点错误?

共有1个答案

包丁雨
2023-03-14

延迟加载仅在会话打开时在事务内部发生。因此,除非事先初始化延迟加载的集合,否则测试方法中会得到null。

另一个类似的问题

 类似资料:
  • 我有从应用程序访问属性的方法。属性 下面是测试用例: 当我访问该方法它的抛空指针。我已经声明该属性在application-test.yml。我缺少什么?任何参考或答案来解决这个问题?

  • 尝试让JUnit与mockito测试一起工作,并在我的测试中获得NPE。我想验证一下,当调用时,紧接着调用了方法。我觉得奇怪的一个问题是,在Mockito上。验证(registrationServiceImpl,Mockito.times(1))。创建注册人(registrationDTO) 方法?IntelliJ只建议界面中的方法? 我的测试代码如下: 下面是我正在测试的代码:

  • 我有一个主页。我正在尝试使用测试注释测试TestNG中的页面标题。我得到了testTitle()的NullPointerException。url正在打开。

  • 我有一个由Hibernate加载的ORM实体,当我需要时,会加载某些关联。该实体通过MQ传输到客户机应用程序(客户机是.NET,所以我使用MessagePack来序列化/反序列化),当实体被MsgPack序列化时,它试图访问惰性加载的关联,但失败了,因为会话已经关闭。即使它没有失败,我也不希望它在某些情况下加载关联。 是否有一种方法告诉hibernate使用空值而不是某些查询结果的代理来填充惰性关

  • 我在尝试获取数据时收到异常,懒惰(最后异常) //应用程序通过以下DAO获取数据。 //Junit测试调用serviceX.getById //使用JUnit //某个对象类具有以下属性。 当我尝试访问jUnit中的另一个对象时,我得到了以下异常 方法已在额外配置中尝试 我们使用TransactionManager的spring注释。 还有,我尝试添加@ Transaction(Propagati

  • 我正在尝试通过Maven运行cucumber+testng+selenium。 当我在Eclipse中通过TestNG测试运行它时,它工作得很好,但当我使用mvn测试时,它会抛出空指针异常 我是不是漏掉了什么?