Исключение Mockito Thread.class в блоке try catch не улучшает покрытие - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь проверить исключение в блоке try catch с помощью метода Thread.sleep в блоке try с помощью Mocito. Я использовал приведенный ниже метод проверки на мокито, и он прошел, как и ожидалось, но никогда не улучшал мое тестовое покрытие. Отчет о покрытии показывает, что блок catch внутри метода waitForSyn c не достигнут. Может кто-нибудь, пожалуйста, помогите, что я здесь скучаю?

public class CreateAccount{
@Autowired
private AccountService accountService,

@Autowired
private BuildAccountResponse buildAccountResponse

 @Value("${waitForSync:0}")
  private Integer accountSyncWaitTimeMs;

public AccountResponse createMyAccount(AccountRequest request, String accountId) {

    accountService.checkIfAccountExists(accountId);

   Optional<AccountResponse> myResponse= buildAccountResponse.create(request, accountId);

   waitForSync(accountId);

   return myResponse.get();
}
}

waitForSyn c метод

private void waitForSync(String accountId) {
try{
if (accountSyncWaitTimeMs>0){
Thread.sleep(accountSyncWaitTimeMs)
}
catch { (Exception e)       
Logger.warn("Failed to apply wait account sync");   

}

Мой метод тестирования mockito

@InjectMocks
@Spy
private CreateAccount createAccount;

private static final accountWaitTime = 1;

ReflectionTestUtils.setField(createAccount, "accountSyncWaitTimeMs" , accountWaitTime);

private AccountRequest request;

private static final String accountId = "AccountId";

@Test (expected = Exception.class)
public void createAccount_waiSync_Exception () {

 doThrow(new InterruptedException()).when(Thread.class);

createAcccount.createMyAccount(request, accountId);
}

Тесты пройдены как и ожидалось, но строки ниже никогда не освещаются, так что в основном я добавил тест на пустоту, так как его улучшить?

catch { (Exception e)       
Logger.warn("Failed to apply wait account sync"); 

1 Ответ

1 голос
/ 27 апреля 2020

Вы можете с помощью PowerMocktio в верхней части Mocktio, вы можете проверить новую версию Mocktio, они обещают внести некоторые улучшения в методику c метод

@RunWith(PowerMockRunner.class)
@PrepareForTest(Thread.class)
public class ExampleTest{

    @InjectMocks
    @Spy
    private CreateAccount createAccount;
    private static final accountWaitTime = 1;
    ReflectionTestUtils.setField(createAccount, "accountSyncWaitTimeMs" , accountWaitTime);

    private AccountRequest request;
    private static final String accountId = "AccountId";

  @Test (expected = Exception.class)
  public void createAccount_waiSync_Exception () {
    PowerMockito.mockStatic(Thread.class);
    PowerMockito.doThrow(new InterruptedException()).when(Thread.class);
    Thread.sleep(anyLong()); // or set the value you want

    createAcccount.createMyAccount(request, accountId);
  }

}
...