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服务
应该是您测试的类。您不应该模仿它(根据您的示例代码,您不应该模仿它)。当
表达式失败时,在中使用它。