1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/kkk001-tiny-mock

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Tiny-Mock

Введение

Tiny-mock — это облегчённая структура для создания mock-объектов, предназначенная для разделения mock и реального кода.

Особенности

Tiny-mock включает в себя локальный mock (local-mock) и сервисный mock (server-mock).

Если требуется использовать mock только при вызове определённого интерфейса, не выполняя реальную логику, а используя локальную ветвь mock, то local-mock может удовлетворить ваши требования.

Если вы хотите использовать mock при вызове определённого интерфейса и вызывать сторонний mock-сервис вместо реальной логики, вам нужно использовать local-mock вместе с server-mock.

  • local-mock предоставляет лёгкую реализацию локального mock;
  • server-mock предоставляет облегчённую реализацию сервисного mock;
  • mock поддерживает два способа настройки: аннотации и XML. Вы можете выбрать любой из них.

I. local-mock

Предоставляет три вида аннотаций: @MockReturn, @MockBy, @MockByHttp. Они соответствуют трём видам конфигураций XML: MockReturnXmlItem, MockByXmlItem, MockByHttpXmlItem.

  1. @MockReturn (MockReturnXmlItem)

Форма аннотации: @MockReturn. Используется на реальном интерфейсе. При вызове реального интерфейса используется указанное пользователем значение.

/**

  • Метод с @MockReturn будет напрямую возвращать значение value. / @Target({METHOD}) @Retention(RUNTIME) public @interface MockReturn { /*
    • Возвращаемое значение mock. Для сложных объектов используется JSON-строка в качестве возвращаемого значения.
    • @see MockAspect */ String value(); }

Конкретные значения:

String THROW = "THROW()"; // выбрасывает исключение String RANDOM = "RANDOM()"; // возвращает случайный объект String RANDOM_EXCEPTION = "RANDOM_EXCEPTION()"; // возвращает случайный объект или выбрасывает исключение.

Форма конфигурации XML:

Конкретный пример:

  1. @MockBy (MockByXmlItem)

Используется на реальном интерфейсе и делегирует выполнение реальной логики третьему классу, затем возвращая результат.

Форма аннотации: @MockBy.

/**

  • Метод, содержащий @MockBy, будет использовать возвращаемое значение метода, указанного в mockedMethodFullPath, для возврата.
  • @author Created by wzy on 2017/6/1. / @Target({ METHOD }) @Retention(RUNTIME) public @interface MockBy { /*
    • Полный путь к методу mock. Используется для определения класса и метода mock.
    • 
      
    • Форма: mock.com.kvn.service.MockServiceA#mockMethod_4()
    • mock.com.kvn.service.MockServiceA#mockMethod_11(java.lang.String,com.kvn.domain.Foo)
    • По умолчанию:
    • Путь к классу mock по умолчанию равен [mock class full path = "mock." + реальный класс package name + ".Mock" + реальный класс class name],
    • Имя метода и параметры mock совпадают с исходным методом.
    • @return */ String delegateMethodFullPath() default MOCKBY_DEFALUT_PATH; String MOCKBY_DEFALUT_PATH = "DEFAULT_PATH"; }

Форма конфигурации XML:

Пример:

  1. @MockByHttp (MockByHttpXmlItem)

Использует сторонний Mock-сервис для делегирования выполнения реальной логики и возврата результата mock.

Для обеспечения лёгкости и поддержки гетерогенных систем здесь используется HTTP-вызов для вызова стороннего mock-сервиса (может использоваться вместе с mock-server или может быть разработан самостоятельно).

Форма аннотации: @MockByHttp.

/**

  • Использует HTTP для mock, реализует mock-сервер, разделяет mock. / @Target({ METHOD }) @Retention(RUNTIME) public @interface MockByHttp { /*
    • URL HTTP. По умолчанию используется mock/class/method?params=xxx. */ String serverPath() default ""; }

Форма конфигурации XML:

Пример:

II. server-mock

Получает запросы mock от local-client и направляет их соответствующему обработчику запросов mock для обработки, а затем возвращает результат mock.

По умолчанию запросы local-client направляются на http://xxx.xxx.xxx:xx/mock/class/method?params=xxx, но также можно указать адрес маршрутизации.

server-mock использует Spring MVC и развёртывается вместе с Tomcat.

Концепция

  • В будущем можно будет добавить возврат исключений server-mock в local-mock.
  • В дальнейшем можно разработать страницу конфигурации для server-mock, чтобы настроить mock-сервисы, что уменьшит объём разработки и сделает его более удобным.

Дизайн

  • Дизайн-схема:

tiny-mock реализация принципа схемы

  • Технология: aop использует Spring AOP; http использует OkHttp. Выполнение реального метода: method_9

return foo; }

// Конфигурация (подробнее см. src/test/resources/beans/beans-mock.xml)
<bean class="com.kvn.mock.local.config_mock.MockReturnXmlItem"
    p:mockedMethodFullPath="com.kvn.mock.local.test.ServiceA#method_12()"
    p:returnValue="RANDOM()" />

Пример MockBy:

// Форма аннотации
@MockBy(delegateMethodFullPath="com.kvn.mock.local.test.MockServiceA#mockMethod_4()")
public String method_4() {
    System.out.println("Выполнение реального метода: method_4");
    return "do method_4------[real method methodA_4]";
}
// Конфигурация (подробнее см. src/test/resources/beans/beans-mock.xml)
<bean class="com.kvn.mock.local.config_mock.MockByXmlItem"
                p:mockedMethodFullPath="com.kvn.mock.local.test.ServiceA#method_14(java.lang.String,com.kvn.mock.local.test.Foo)"
                p:delegateMethodFullPath="com.kvn.mock.local.test.MockServiceA#mockMethod_14(java.lang.String,com.kvn.mock.local.test.Foo)" />

Пример MockByHttp:

// Форма аннотации
@MockByHttp
public String method_15(){
    System.out.println("Выполнение реального метода: method_15");
    return "do method_15------[real method method_15]";
}
// Конфигурация (подробнее см. src/test/resources/beans/beans-mock.xml)
<bean class="com.kvn.mock.local.config_mock.MockByHttpXmlItem"
                p:mockedMethodFullPath="com.kvn.mock.local.test.ServiceA#method_17()" />

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Tiny-mock — это легковесный mock-фреймворк, предназначенный главным образом для того, чтобы разъединить mock и реальный код. Может использоваться для тестирования stub. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/kkk001-tiny-mock.git
git@api.gitlife.ru:oschina-mirror/kkk001-tiny-mock.git
oschina-mirror
kkk001-tiny-mock
kkk001-tiny-mock
master