Что за mock объекты? (java)

238
21 января 2019, 13:10

Изучаю паттерн MVC, в моих задач очень часто встречается такая фраза как mock-объекты, такое объяснение нашел в гугле - "Объект Mock используется для модульного тестирования. Если у вас есть объект, методы которого вы хотите протестировать, и эти методы зависят от какого-либо другого объекта,вы создаете макет зависимости, а не фактический экземпляр этой зависимости. Это позволяет вам изолировать свой объект." и куча подобных ему. Все это понятно на каком-то интуитивном уровне. Может кто-нибудь разъяснить, что и как более простым языком, пожалуйста.

Answer 1

Mock-объект — это объект "заглушка". Например, необходимо протестировать функцию, которая посылает запросы по сети:

package main;
sub sendRequest {
    my $request = shift;
    my $ua = Mock::UserAgent->new;
    my $response = $ua->request( $request );
    if ( $response->is_successful ) {
        # что-то делаем ...
    } else {
        # падаем в случае ошибки
        die $response->status_line;
    }
    return $response;
}

В данном случае mock-объектом является $ua, которая была создана с помощью специального модуля Mock::UserAgent (пример). И её задача заключается лишь в имитации действий. Например её метод request никаких фактических запросов по сети не посылает, а делает вид, что типа он послал и вернул ответ. Это нужно, например, для блочных тестов, когда, к примеру, доступа к интернету нет, да и это и не требуется для тестирования. Такой mock-метод request, мог бы выглядеть так:

package Mock::UserAgent;
sub request {
    my $request = shift;
    my $response = HTTP::FakeResponse->new;
    return $response;
}

Это одно из применений mock-объектов. Другое, так же связанное с тестированием, заключается в том, чтобы в своей функции использовать модуль, которыё ещё не разработан, но необходим для функционирования вашей функции, но разрабатывается другими разработчиками, например, или вы используется методику "разработка через тестирование". И вот, чтобы их не ждать, вы можете создать mock-объект, который типа возвращает нужные вам данные, как если бы это был реальный объект, что позволит вам разделаться с тестами для вашей готовой функции и перейти к разработке следующей. Т.е. это своего рода "изоляция зависимостей" при тестировании.

Не каждый же день имеется возможность тренироваться с партнёром-боксёром, чтобы отработать прямой удар, а отрабатывать его надо, поэтому используют mock-объект — груша.

READ ALSO
Hibernate Postgress exception Error accessing index information

Hibernate Postgress exception Error accessing index information

Сделал таблички: Магазин(Shop) Товар(Item) Табличка связи(item_x_shop)

263
Scanner пропускает строки

Scanner пропускает строки

проблема заключается в том что при считывании данных с клавиатуры с помощью методов класса Scanner, он пропускает строки (Date и Notes)Насколько я понял...

171