Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 模拟加载导航属性_Java_Unit Testing_Mockito - Fatal编程技术网

Java 模拟加载导航属性

Java 模拟加载导航属性,java,unit-testing,mockito,Java,Unit Testing,Mockito,这是我的代码的一个非常简化的版本,它说明了具体的问题 是否有任何方法可以控制从测试中调用accountProductRepository.refresh()时发生的情况 不知何故,我需要在buyProduct()方法中创建的AccountProductPojo上设置ProductPojo,以便在访问getProduct().getName()属性时不会得到空指针 refresh使用javax.persistence.EntityManager.refresh()根据buyProduct()方法中

这是我的代码的一个非常简化的版本,它说明了具体的问题

是否有任何方法可以控制从测试中调用accountProductRepository.refresh()时发生的情况

不知何故,我需要在buyProduct()方法中创建的AccountProductPojo上设置ProductPojo,以便在访问getProduct().getName()属性时不会得到空指针

refresh使用javax.persistence.EntityManager.refresh()根据buyProduct()方法中设置的id加载导航属性


这似乎是一个相当经典的案例

您可以尝试以下方法:

    Mockito.doAnswer(new Answer() {
          public Object answer(InvocationOnMock invocation) {
              Object[] args = invocation.getArguments();
              AccountProductPojo accountProduct = (AccountProductPojo) args[0];
              accountProduct.setProduct(new ProductPojo(PRODUCT_ID_CONSTANT, PRODUCT_NAME_CONSTANT));
              return null;
          }}).when(accountProductRepository).refresh(Mockito.any());

这里的关键是,在模拟上调用
refresh()
时,您可以在POJO上调用
setProduct()
,POJO作为参数传递给
refresh()
调用,以避免以后出现空指针异常

Mockito.when(你的方法)。然后返回(某物)。除了这一点之外,它看起来像是buyProduct()中的一个bug,在这里调用
setProductId(accountId)
。productId参数未使用。哦,是的,这是一个复制粘贴错误,正在编辑。
    Mockito.doAnswer(new Answer() {
          public Object answer(InvocationOnMock invocation) {
              Object[] args = invocation.getArguments();
              AccountProductPojo accountProduct = (AccountProductPojo) args[0];
              accountProduct.setProduct(new ProductPojo(PRODUCT_ID_CONSTANT, PRODUCT_NAME_CONSTANT));
              return null;
          }}).when(accountProductRepository).refresh(Mockito.any());