Заглушка для финального метода класса из другого публичного класса в Junit и Mockito - PullRequest
0 голосов
/ 05 июля 2018

Мне нужно Заглушка Финальный класс метод в других публичный класс метод. В моем сценарии у меня есть имя класса ElasticIntegration , которое является классом Public. Есть метод с именем licenseCheckOut

public Response licenseCheckOut(String jsonObj) {
    LogResource logData = new LogResource();
    try {
        LicenseServiceImpl licenseCheck = new LicenseServiceImpl();
        JSONObject queryObj = new JSONObject(jsonObj);
        int licenseId = -1;         
        Properties configProperties = Utilities.getConfigProperties();      
        Utilities.verifykeycloakToken(queryObj, configProperties);
        String userName = userAuth.getUserInfo(queryObj,configProperties);
        if(userName !=null){
            licenseId = licenseCheck.checkoutLicense(userName);
        }
        String result = "{\"licenseid\": "+ licenseId +"}";
        return Response.ok(result).build();
    } catch (Exception ex) {
        LogDetail details = Utilities.constructDetails("licenseCheckOut", ex);
        logData.writeLogMessage(null, details);
        return Response.serverError().entity(details).build();
    }
}

В методе licenseCheckOut есть verifykeycloakToken - метод, который нам нужно заглушить. Утилиты класс является финальным классом.

**verifykeycloakToken Function in Utilities class**

Если вы укажете ссылку на вышеуказанное изображение точно connection.connect () , мы получим ошибку. Поэтому я заглушил класс с когда (). ThenReturn ()

    Utilities util = new Utilities();
    Utilities mock = mock(Utilities.class);
    JSONObject queryObj = new JSONObject(jsonObj);
    Properties mapProperties = null ;
    when(mock.verifykeycloakToken(queryObj, mapProperties)).thenReturn(true);

Ошибка, которую я получаю здесь

org.mockito.exceptions.base.MockitoException: Не может издеваться над шпионским классом com.project.Utilities Мокито не может издеваться / шпионить, потому что: - финальный класс at ElasticIntegrationTest.licenseCheckOut_verifykeycloakToken_ShouldReturnSuccessBuild (ElasticIntegrationTest.java:51)

1 Ответ

0 голосов
/ 05 июля 2018

Ваш метод verifykeycloakToken в классе Utilities является методом static.

Чтобы поиздеваться над этим , вы можете изучить следующие варианты:

  • Смоделируйте все внутри verifykeycloakToken функции. Кажется немного сложно сделать в вашем случае, когда вы создаете new URL() объект внутри него, который mockito не может обработать.
  • Используйте powermockito , потому что одно только mocktio не может справиться с static насмешкой.

PS: Использование powermock - это , как правило, осуждается на , особенно если вы следуете TDD . Но это действительно приходит на помощь, работая с устаревшим кодом .

...