Как выполнить модульное тестирование с использованием Java Mockito - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь проверить этот код, используя mockito, поэтому нужно смоделировать result как ошибку и проверить код.В этом случае я жестко закодировал result как 1.

public class RetrieveData {
    public int retrieveMetaData()  {
        int retries = 0;
        int result = 0;
        int MAX_RETRIES = 3;
        while (retries++ < MAX_RETRIES) {
            try {
                result = 1;
            } catch (Exception e) {
                if(retries < MAX_RETRIES) {
                    System.out.println(" retries  :" + retries );
                } else {
                    throw e;
                }
            }
        }
        return result;
    }
    public static void main(String[] args) {
        int result ;
        RetrieveData obj = new RetrieveData();
        result = obj.retrieveMetaData();
        System.out.println(result);
    }
}

Mockito:

import org.junit.Test;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
public class TestretrieveMetaData {

    @Test
    public void test_retrieveMetaData() throws Exception {
        RetrieveData resultObj = mock(RetrieveData.class);

        // how to add the mock for the result.

    }
}

1 Ответ

0 голосов
/ 26 ноября 2018

Прежде всего, вы должны понять, что вы собираетесь делать!

Видите ли, вы либо издеваетесь над классом X ... потому что экземпляр X используется в некоторыхкласс Y, и вы намереваетесь проверить Y .Или вы намереваетесь проверить класс X, но тогда вам не следует издеваться над экземплярами X!Либо вы тестируете X, либо используете X для тестирования чего-то другого.

Предполагая, что вы хотите смоделировать экземпляр вашего класса RetrieveData, вы просто делаете:

RetrieveData resultObj = Mockito.mock(RetrieveData.class);
Mockito.when(resultObj.retrieveMetaData()).thenReturn(42);

Итак,чтобы выровнять с этим комментарием Тобба: вы не можете "насмехаться" над этим полем результатов в одиночку.Если вообще, вы можете высмеивать полные экземпляры вашего класса.Но, как сказано: это имеет смысл, когда вы используете этот экземпляр в другом классе, который вы собираетесь тестировать.

Короче говоря: как уже говорилось, реальная проблема заключается в том, что вы пытаетесь использоватьпонятия, которые вы просто не понимаете (здесь нет суждения).Моя рекомендация: начните с прочтения хорошего учебника по Mockito .Затем потратил много времени на размышления «как я могу написать код, который я могу тестировать разумными способами».Вы пытаетесь начать с шага 10, но это не сработает, потому что вы можете сделать это только тогда, когда сделали шаги с 1 по 9 раньше, и понять, о чем они.

И да, вы можете использовать Mockito шпион , если вы хотите "частичное издевательство".Используя это, вы можете тестировать части X, в то же время «вычеркивая» другие части X. Но это действительно продвинутая функция, и, скорее всего, не тема, которую вы должны изучить в первую очередь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...