【问题标题】:How to write JUnit test case for void method如何为 void 方法编写 JUnit 测试用例
【发布时间】:2023-02-17 23:20:53
【问题描述】:

我正在尝试为 void 方法编写 Junit 测试用例。此方法用于更新数据库中的值。我已经尝试了某些测试用例并成功返回。但是当我检查覆盖范围时,它显示为零。谁能告诉我为 void 方法编写测试用例的正确方法。

这是我的服务等级:

public class CustomerServiceImpl implements CustomerService {


  @Autowired
  ERepository eRepository;

  @Autowired
  ActivityUtil activityUtil;


  @Override
  public void updateCustomer(RequestDTO requestDTO)
      throws CustomAException {
    if (Objects.nonNull(requestDTO.getAdmissionId())) {
      Optional<Admission> optionalAdmission = eRepository.findById(
          requestDTO.getAdmissionId());
      if (optionalAdmission .isPresent()) {
        EAdmission eAdmission = optionalAdmission.get();
        updateCustomer(requestDTO, eAdmission);
      } else {
     
        throw new CustomAException ("Admission details not found");
      }
    }
    else {
      throw new CustomAException ("Admission id  not found");
    }
  }

  private void updateCustomer(RequestDTO requestDTO,
      EAdmission eAdmission)
      throws CustomAException {
    logger.info("updating customer info");
    try {
      if (ObjectUtils.isNotEmpty(eAdmission.getCustomer())) {
        eAdmission.getCustomer().setCustomerEmailAddress(
            requestDTO.getEmail());
        eAdmission.getCustomer().setCorporateTelephoneNumber(
            requestDTO.getCustomerPhone());
        eAdmission.getCustomer().setZipCode(requestDTO.getZipCode());
        eAdmission.getCustomer().setCustomerAddress1(requestDTO.getAddress1());
        evfAdmissionRepository.save(evfAdmission);
        activityUtil.createActivityLog(eAdmission, Constants.ENTRY_COMPLETED);
      } else {
        throw new CustomAException ("Customer details not found ");
      }
    } catch (Exception exception) {
      logger.error(Constants.CUSTOMER_UPDATE_ERROR_MESSAGE);
      throw new CustomAException (Constants.CUSTOMER_UPDATE_ERROR_MESSAGE);
    }

我正在尝试为 updateCustomer 编写测试用例,但我的测试类即使成功了也具有零覆盖率。

测试类:

@SpringBootTest
public class CustomerServiceImplTest {

  @InjectMocks
  CustomerServiceImpl CustomerServiceImpl;

  @Mock
  ERepository eRepository ;

  @Mock
  ActivityUtil activityUtil;

  @Before
  public void setUp() {
    MockitoAnnotations.initMocks(this);
  }

  @Test
  public void updateCustomerException() throws Exception {
    CustomerServiceImpl CustomerServiceImplTest = mock(CustomerServiceImpl.class);
    when(evfAdmissionRepository.findById(any())).thenThrow(ConstraintViolationException.class);
    Mockito.doThrow(CustomAException .class).when(CustomerServiceImplTest).updateCustomer(setRequestDTO());
    }

  @Test
  public void updateCustomerSuccess() throws Exception {
    CustomerServiceImpl CustomerServiceImplTest = mock(CustomerServiceImpl.class);
 
    CustomerServiceImplTest .updateCustomer(setRequestDTO());
    //doNothing().when(evfCustomerServiceImpl).updateEVFCustomerOnSubscribe(any());
    verify(CustomerServiceImplTest ).updateCustomerOn(setRequestDTO());
  }

private RequestDTO setRequestDTO() {
    RequestDTO eRequestDTO = new RequestDTO ();
    eRequestDTO .setEmail("test");
  // rest of code for setting value
    return eRequestDTO ;
  }

【问题讨论】:

    标签: java spring-boot junit mockito


    【解决方案1】:

    ArgumentCaptor 可用于在您的方法中捕获和断言参数。你可以在这里阅读ArgumentCaptor

    【讨论】:

      猜你喜欢
      • 2013-08-01
      • 2017-09-02
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多