public boolean addTemplate(SmsTemplateDTO smsTemplatedto) {...} 1 usage二 20230500259 +1@Override public boolean updateTemplate(SmsTemplatedTo smsTemplatedto){ List<PushPlanMsgDTO> pushPlanMsgDTOS=pushPlanSetMapper if(!CollectionUtils.isEmpty(pushPlanMsgdtos)) {.queryBindValidPushPlan(smsTemplateDTo.getTemplateId()); I throw BizException.error( warnningMessage:"该计划绑定了生效中的营销推送计划,不允许修改!"); UserInfo userInfo =UserContext.getUserInfo(); smsTemplateDTO.setModifierNo(userInfo.getTlrId()); smsTemplateDTO.setoprorInstNo(userInfo.getInstNo()); if(smsTemplateMapper.updateTemplate(smsTemplatedTo)>0){ log.info("修改成功"); return true;} else { return false;请根据上述代码生成单元测试,需要使用Junit和mockito,@injectmocks,@mock,mockit.when(xx).thenReturn(xx),最后使用verify,tims(xx)验收执行次数,仅通过impl层生成测试
时间: 2024-02-24 18:56:03 浏览: 21
首先,我们需要明确一下测试的目的。由于这段代码是修改短信模板的方法,我们需要测试它是否能够正确地修改模板,并且在特定情况下是否能够正确地抛出异常。
对于这个方法,我们需要 mock 掉它所依赖的 pushPlanSetMapper 和 smsTemplateMapper。我们可以使用 @Mock 注解来 mock 掉这些依赖。
然后,我们需要使用 @InjectMocks 来注入我们要测试的 SmsTemplateServiceImpl 对象,并使用 Mockito.when().thenReturn() 来指定 mock 对象的行为。
最后,我们需要使用 verify 和 times 来验证方法的执行次数和执行结果是否符合预期。
下面是一个可能的测试代码示例:
```java
@RunWith(MockitoJUnitRunner.class)
public class SmsTemplateServiceImplTest {
@Mock
private PushPlanSetMapper pushPlanSetMapper;
@Mock
private SmsTemplateMapper smsTemplateMapper;
@InjectMocks
private SmsTemplateServiceImpl smsTemplateService;
@Test
public void testUpdateTemplate() {
// 构造测试数据
SmsTemplateDTO smsTemplateDTO = new SmsTemplateDTO();
smsTemplateDTO.setTemplateId(1);
smsTemplateDTO.setTemplateContent("test");
smsTemplateDTO.setTemplateType(1);
// mock 掉 pushPlanSetMapper 的行为
List<PushPlanMsgDTO> pushPlanMsgDTOS = new ArrayList<>();
Mockito.when(pushPlanSetMapper.queryBindValidPushPlan(smsTemplateDTO.getTemplateId()))
.thenReturn(pushPlanMsgDTOS);
// mock 掉 smsTemplateMapper 的行为
Mockito.when(smsTemplateMapper.updateTemplate(smsTemplateDTO)).thenReturn(1);
// 执行测试方法
boolean result = smsTemplateService.updateTemplate(smsTemplateDTO);
// 验证执行结果
assertTrue(result);
// 验证 pushPlanSetMapper 的执行次数
Mockito.verify(pushPlanSetMapper, Mockito.times(1))
.queryBindValidPushPlan(smsTemplateDTO.getTemplateId());
// 验证 smsTemplateMapper 的执行次数
Mockito.verify(smsTemplateMapper, Mockito.times(1)).updateTemplate(smsTemplateDTO);
}
@Test(expected = BizException.class)
public void testUpdateTemplateWithException() {
// 构造测试数据
SmsTemplateDTO smsTemplateDTO = new SmsTemplateDTO();
smsTemplateDTO.setTemplateId(1);
smsTemplateDTO.setTemplateContent("test");
smsTemplateDTO.setTemplateType(1);
// mock 掉 pushPlanSetMapper 的行为
List<PushPlanMsgDTO> pushPlanMsgDTOS = new ArrayList<>();
pushPlanMsgDTOS.add(new PushPlanMsgDTO());
Mockito.when(pushPlanSetMapper.queryBindValidPushPlan(smsTemplateDTO.getTemplateId()))
.thenReturn(pushPlanMsgDTOS);
// 执行测试方法
smsTemplateService.updateTemplate(smsTemplateDTO);
}
}
```