我是新的单元测试。我正在尝试测试服务层在一个Spring的应用程序。好,我有任何关系在我的服务。
VirtualDatacenterModel vdc = vdcRepository.findById(vmDTO.getVdc()).orElseThrow(() -> new ClientException("Invalid VDC id"));
DataCenterModel dc = vdc.getDatacenter();
String vmName = vdc.getTenant().getName() + "_[" + vmDTO.getName() + "]";
在我的测试中,我使用了MOCKITO,依赖关系已经被模仿了,然后我就看不出哪里错了
CreateVmDTO vmDTO = Mockito.mock(CreateVmDTO.class);
VmModel vm = Mockito.mock(VmModel.class);
VirtualDatacenterModel vdc = Mockito.mock(VirtualDatacenterModel.class, Mockito.RETURNS_DEEP_STUBS);
TenantModel tenant = Mockito.mock(TenantModel.class);
Mockito.when(vmRepository.save(vm)).thenReturn(new VmModel());
Mockito.when(vdcRepository.findById(vmDTO.getVdc())).thenReturn(Optional.of(new VirtualDatacenterModel()));
Mockito.doReturn(tenant).when(vdc).getTenant();
Mockito.when(vdc.getTenant().getName()).thenReturn("Olivia");
VmModel vmReturn = vmService.createVM(vmDTO);
我收到了NullPointerException,我可能不知道如何正确使用Mockito
1条答案
按热度按时间hkmswyz61#
你当时只能嘲弄一个动作,下面这一行肯定会出问题:
导致
vmDTO.getVdc()
将返回空指针。(vmDTO本身是一个模拟对象,没有用于该调用的指令集)。假设vmDTO.getVdc()返回vdc,您可以按如下方式修复:另外,您的方法的命名也让我感到困惑:你有一个方法
vdcRepository.findById
,但是你的输入是一个vdc对象,而不是一个id。要么是命名混乱,要么是你的输入错误。如果getVdc返回了一个Id,那么你可以通过模拟Id的返回来修复代码(将方法重命名为getVdcId或其他名称)。注意:我个人很少模仿DTO。创建真实的的DTO对象也很容易,因为它们通常带有一个构建器或getter/setter。