Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.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
Junit when().thenReturn()不返回服务层方法调用_Junit_Mocking_Mockito - Fatal编程技术网

Junit when().thenReturn()不返回服务层方法调用

Junit when().thenReturn()不返回服务层方法调用,junit,mocking,mockito,Junit,Mocking,Mockito,我遇到一个问题,当我尝试when(linkingTicketsService.getLinkedTicketDetails(list)),然后返回(linkingTicketsResponseList)在我的测试中,它仍然在运行linkingTicketsService.getLinkedTicketDetails(list)方法,它不应该只是重新调整到我准备好的模拟,而不是运行方法本身吗?我试过自动连接我在前一篇文章中看到的LinkingTickets服务,但它没有帮助任何,任何建议?谢谢 测

我遇到一个问题,当我尝试
when(linkingTicketsService.getLinkedTicketDetails(list)),然后返回(linkingTicketsResponseList)在我的测试中,它仍然在运行linkingTicketsService.getLinkedTicketDetails(list)方法,它不应该只是重新调整到我准备好的模拟,而不是运行方法本身吗?我试过自动连接我在前一篇文章中看到的LinkingTickets服务,但它没有帮助任何,任何建议?谢谢

测试代码:

@RunWith(MockitoJUnitRunner.class)
@SpringBootTest(classes = LinkingTicketsService.class)
public class LinkingTicketsServiceTest {

    @Autowired
    LinkingTicketsService linkingTicketsService;

    @Mock
    WorkOrdersHierarchyRepo workOrdersHierarchyRepo;

    @Before
    public void setup() {
        linkingTicketsService = new LinkingTicketsService(
                workOrdersHierarchyRepo,
                workOrderPTRViewRepo,
                ticketEngagementRepo,
                productMasterRepo
        );
    }

    @Test
    public void getLinkedTicketsByTicketNumber() {

        WorkOrderPTRView workOrderPTRView1 = new WorkOrderPTRView();
etc...

        Optional<WorkOrderPTRView> workOrderPTRViewOptional =  Optional.of(workOrderPTRView1);

        List<LinkingTicketsResponse> linkingTicketsResponseList = new ArrayList<>();
        LinkingTicketsResponse response = new LinkingTicketsResponse();
etc...

        List<Long> list = new ArrayList<>();
        list.add(123L);

        when(workOrderPTRViewRepo.findWorkOrderPTRViewByPartnerTicketNumber("567")).thenReturn(workOrderPTRViewOptional);
        when(linkingTicketsService.getLinkedTicketDetails(list)).thenReturn(linkingTicketsResponseList);

        LinkingTicketsResponse linkingTicketsResponse = linkingTicketsService.getLinkedTicketsByTicketNumber("567");
        assertThat(linkingTicketsResponse.getPartnerTicketNumber(), equalTo("123"));
    }
}

@RunWith(MockitoJUnitRunner.class)
@SpringBootTest(classes=LinkingTicketsService.class)
公共类链接tickets服务测试{
@自动连线
LinkingTickets服务LinkingTickets服务;
@嘲弄
工作订单HierarchyRepo工作订单HierarchyRepo;
@以前
公共作废设置(){
linkingTicketsService=新的linkingTicketsService(
工作订单层级报告,
劳埃德尔特维雷波,
票务中心,
productMasterRepo
);
}
@试验
public void getLinkedTicketsByTicketNumber(){
WorkOrderPTRView workOrderPTRView1=新的WorkOrderPTRView();
等
可选的workorderpriewoptional=可选的。of(workorderpriew1);
List linkingTicketsResponseList=new ArrayList();
LinkingTicketsResponse响应=新建LinkingTicketsResponse();
等
列表=新的ArrayList();
列表。添加(123L);
当(workOrderPTRViewRepo.findWorkOrderPTRViewByPartnerTicketNumber(“567”))时,返回(workorderptrviewoOptional);
当(linkingTicketsService.getLinkedTicketDetails(列表)),然后返回(linkingTicketsResponseList);
LinkingTicketsResponse LinkingTicketsResponse=linkingTicketsService.GetLinkedTicketsBycketNumber(“567”);
资产(linkingTicketsResponse.getPartnerTicketNumber(),等于(“123”);
}
}
方法:

    public LinkingTicketsResponse getLinkedTicketsByTicketNumber(String ticketNumber) {

        List<LinkingTicketsResponse> linkingTicketsResponseList = new ArrayList<>();
        Optional<WorkOrderPTRView> workOrderPTRViewOptional;

        //getting work order number
        workOrderPTRViewOptional = workOrderPTRViewRepo.findWorkOrderPTRViewByPartnerTicketNumber(ticketNumber);
        if (workOrderPTRViewOptional.isPresent()) {
            List<Long> workOrderNumbers = new ArrayList<>();
            workOrderNumbers.add(workOrderPTRViewOptional.get().getOrderId());

            linkingTicketsResponseList = getLinkedTicketDetails(workOrderNumbers);
        } else {
            LinkingTicketsResponse linkingTicketsResponse = new LinkingTicketsResponse();
            linkingTicketsResponse.setStatusCode(200);
            linkingTicketsResponse.setStatus("Failed.");
            linkingTicketsResponse.setStatusMessage("Could not find record for Work Order PTR");
            linkingTicketsResponseList.add(linkingTicketsResponse);
        }
        return linkingTicketsResponseList.get(0);
    }
public linkingtickets响应getLinkedTicketsByTicketNumber(字符串ticketNumber){
List linkingTicketsResponseList=new ArrayList();
可选择的工作或可选择的工作;
//获取工作订单号
workorderperfiewoptional=workorderperfiewrepo.findWorkOrderPtrViewPartnerTicketNumber(ticketNumber);
if(workorderperviewooptional.isPresent()){
List workOrderNumbers=new ArrayList();
添加(workorderptrviewooptional.get().getOrderId());
linkingTicketsResponseList=getLinkedTicketDetails(工作编号);
}否则{
LinkingTickets响应LinkingTickets响应=新建LinkingTickets响应();
linkingTicketsResponse.setStatusCode(200);
linkingTicketsResponse.setStatus(“失败”);
linkingTicketsResponse.setStatusMessage(“找不到工单PTR的记录”);
linkingTicketsResponseList.add(linkingTicketsResponse);
}
返回linkingTicketsResponseList.get(0);
}

安装程序中的数组引用与测试方法中使用的数组引用不同,因此匹配器不匹配,因此调用时返回null。松开预期的匹配项,它应该可以工作。@Nkosi在(linkingTicketsService.getLinkedTicketDetails(anyList())时将其更改为
。然后返回(linkingTicketsResponseList)我还得到NPE?不确定发生了什么?@Nkosi it在
if(workorderptiewoptional.isPresent())
上得到了一个NPE,因为
workorderptiewoptional
为空,但是没有一个方法
公共链接tickets响应getLinkedTicketsByTicketNumber(String ticketNumber)
应该运行?你认为它为什么不应该运行?您在测试中显式调用了它(ticketNumber为“567”)——此外,您的示例没有显示测试的
workorderptviewrepo
定义?
linkingtickets服务
应该是您测试的类。您不应该模仿它(根据您的示例代码,您不应该模仿它)。当
表达式失败时,在
中使用它。