Де хэвилленд dh.98 «москито»
Содержание:
- Spy
- 1.3 Имитация объекта
- Benefits of Mockito
- Боевое использование Де Хэвилленд «Москито»
- Обзор
- О статье
- Ссылки
- A more meaningful example
- Общие методы проверки
- More info
- Stubbing methods
- Пользовательский ответ (Ответ)
- mock и spy
- Mockito: что это такое и зачем нужно
- Использование Mockito и PowerMock
- подводить итоги
- Модули
Spy
Имейте в виду, что если вы макетируете объект, этот объект Mock вернет значение по умолчанию для всех методов возврата, отличных от Void (объект возвращает null), и все методы Void ничего не сделают.Если вы хотите сохранить функцию исходного объекта и изменить только возвращаемое значение одного или нескольких методов, вы можете использовать метод Spy Приведенный выше код показывает, что метод Spy не меняет метод в ArrayList, но возвращает 1, когда get (0)
Обратите особое внимание на то, что этот метод Spy кажется очень удобным. Фактически, если вы шпионите за объектом, который требует Mock, вам будет предложено, чтобы у объекта не было Mock, как TextView
На самом деле, даже если вы прочитали весь предыдущий контент, вы все равно не можете решить нас При использовании Log.i («tag», «msg»); до этого модульный тест завершится неудачно и выдаст запрос:
Это связано с тем, что JUnit не может быть протестирован на уровне чистой Java, а использование API-интерфейса не-чистой Java приведет к ошибке. Это требует некоторой Mock Framework, чтобы помочь нам в тестировании, на этот раз потребуется время, чтобы написать новое введение в блог.
Есть два метода, чтобы издеваться над статическими методами,
- Одним из них является использование PowerMock для расширения Mockito.
- Другой — создать StaticWrapper для превращения статических методов в нестатические.
Метод заключается в следующем:
1.3 Имитация объекта
Синтаксис для создания объекта Mock — mock (класс или интерфейс).
Создание фиктивного объекта
mock(Class classToMock); mock(Class classToMock, String name) mock(Class classToMock, Answer defaultAnswer) mock(Class classToMock, MockSettings mockSettings) mock(Class classToMock, ReturnValues returnValues)
Вы можете создавать фиктивные объекты для классов и интерфейсов, а также можете называть фиктивные объекты при их создании. Преимущество именования фиктивных объектов заключается в том, что фиктивные объекты легко идентифицировать при отладке.
Ожидаемое поведение и установка возвращаемого значения фиктивного объекта
Предположим, мы создаем фиктивный объект класса LinkedList:
LinkedList mockedList = mock(LinkedList.class);
Benefits of Mockito
-
No Handwriting − No need to write mock objects on your own.
-
Refactoring Safe − Renaming interface method names or reordering parameters will not break the test code as Mocks are created at runtime.
-
Return value support − Supports return values.
-
Exception support − Supports exceptions.
-
Order check support − Supports check on order of method calls.
-
Annotation support − Supports creating mocks using annotation.
Consider the following code snippet.
package com.tutorialspoint.mock; import java.util.ArrayList; import java.util.List; import static org.mockito.Mockito.*; public class PortfolioTester { public static void main(String[] args){ //Create a portfolio object which is to be tested Portfolio portfolio = new Portfolio(); //Creates a list of stocks to be added to the portfolio List<Stock> stocks = new ArrayList<Stock>(); Stock googleStock = new Stock("1","Google", 10); Stock microsoftStock = new Stock("2","Microsoft",100); stocks.add(googleStock); stocks.add(microsoftStock); //Create the mock object of stock service StockService stockServiceMock = mock(StockService.class); // mock the behavior of stock service to return the value of various stocks when(stockServiceMock.getPrice(googleStock)).thenReturn(50.00); when(stockServiceMock.getPrice(microsoftStock)).thenReturn(1000.00); //add stocks to the portfolio portfolio.setStocks(stocks); //set the stockService to the portfolio portfolio.setStockService(stockServiceMock); double marketValue = portfolio.getMarketValue(); //verify the market value to be //10*50.00 + 100* 1000.00 = 500.00 + 100000.00 = 100500 System.out.println("Market value of the portfolio: "+ marketValue); } }
Let’s understand the important concepts of the above program. The complete code is available in the chapter First Application.
-
Portfolio − An object to carry a list of stocks and to get the market value computed using stock prices and stock quantity.
-
Stock − An object to carry the details of a stock such as its id, name, quantity, etc.
-
StockService − A stock service returns the current price of a stock.
-
mock(…) − Mockito created a mock of stock service.
-
when(…).thenReturn(…) − Mock implementation of getPrice method of stockService interface. For googleStock, return 50.00 as price.
-
portfolio.setStocks(…) − The portfolio now contains a list of two stocks.
-
portfolio.setStockService(…) − Assigns the stockService Mock object to the portfolio.
-
portfolio.getMarketValue() − The portfolio returns the market value based on its stocks using the mock stock service.
Боевое использование Де Хэвилленд «Москито»
Поставки бомбардировочных «Москито» велись довольно медленно — приоритетом пользовались истребительные и разведывательные части. 105-я АЭ, начав получать В Mk.IV серии 1 в ноябре 1941 г., к апрелю будущего года получила только 9 таких самолетов. В бою они дебютировали 31 мая 1942 г., когда 4 «Москито» нанесли удар по Кёльну. 19 сентября самолеты эскадрильи совершили первый дневной налет на Берлин. В ноябре 1942 г. Москито В Mk.IV получила 139-я АЭ. Обе эскадрильи специализировались в точечных ударах с малых высот на рассвете или в сумерках. С июня 1943 г. эти части вошли в состав 8-й группы Бомбардировочного командования, объединявшей эскадрильи самолетов-целеуказателей. Самолеты модификации В Mk.lX первой в апреле 1943 г. получила 109-я АЭ, впоследствии также вошедшая в 8-ю группу.
На рубеже 1943-1944 гг. самолетами Де Хэвилленд Москито В Mk.IV вооружили 627 и 692-ю АЭ. Последняя из них первой среди частей «Москито» применила 1814-кг бомбы «Куки», сбросив их на Дюссельдорф в ночь на 24 февраля 1944 г. С весны 1944 г. ночные действия стали доминирующими для «Москито», поскольку при дневных операциях, несмотря на высокую скорость самолетов, потери все-таки были весьма ощутимыми. 8 эскадрилий, включенных в состав Легких ночных ударных сил, эксплуатировали, главным образом, самолеты модификации В Mk.XVI, а также В Мк.ХХ и Мк.25 канадского производства. Вплоть до конца войны они действовали над территорией Германии — например, в марте 1945 г. Берлин 27 раз подвергался налетам Легких ночных ударных сил, а в ночь на 22 марта над городом действовали все 8 эскадрилий этих сил — свыше 130 самолетов.
На Тихоокеанском ТВД «Москито»-бомбардировщики не применялись. Хотя в конце 1944 г. в Австралию прибыла 628-я АЭ, чьи самолеты были приспособлены для применения противокорабельных вращающихся бомб «Хайболл», в бой её так и не ввели из-за отсутствия подходящих целей и опасения, что новое оружие может быть захвачено и скопировано противников.
Самолеты DH.98 «Москито» В Мк.35 не успели принять участия в боевых действиях. В послевоенное время их эксплуатировали три АЭ, дислоцировавшиеся в Германии (до 1950 г.), а также размещенные в метрополии 109-я и 139-я АЭ целеуказателей. Последние были перевооружены реактивными «Канберрами» лишь в 1952-1953 гг.
«Москито» Бомбардировочного командования за время войны выполнили почти 40 тысяч боевых вылетов, потеряв 254 машины. Таким образом, уровень потерь составил 0,63% — намного ниже, чем у любого другого типа бомбардировщиков Королевских ВВС. Концепция скоростного невооруженного бомбардировщика полностью оправдала себя.
Обзор
Термин BDD впервые был придуман Дэном Нортом еще в 2006 году.
BDD поощряет написание тестов на естественном, удобочитаемом языке, ориентированных на поведение приложения.
Он определяет четко структурированный способ написания тестов в следующих трех разделах (Arrange, Act, Assert):
- при некоторых предварительных условиях (организовать)
- когда происходит действие (действие)
- затем проверьте вывод (Assert)
Библиотека Mockito поставляется с классом BDDMockito, который представляет BDD-дружественные API. Этот API позволяет нам использовать более дружественный для BDD подход, организуя наши тесты с помощью given () и делая утверждения с помощью then () .
В этой статье мы собираемся объяснить, как настроить тесты Mockito на основе BDD. Мы также поговорим о различиях между API Mockito и BDDMockito , чтобы в конечном итоге сосредоточиться на API BDDMockito .
О статье
Перед вами очередное руководство по Mockito. В нём я, с одной стороны, попытался описать функционал этой библиотеки так, чтобы незнакомый с нею читатель сразу получил возможность полноценно ею пользоваться, а не только общее представление о ней. С другой — я хотел сделать его достаточно компактным и структурированным, чтобы можно было быстро прочесть его целиком и быстро найти в нём что-то единожды прочитанное, но подзабытое. В общем, эта такая статья, какая бы пригодилась мне самому, когда я только столкнулся с этой библиотекой и не очень понимал, как она работает.
Полагаю, она и сейчас может пригодиться мне же — иногда я забываю что-то из этого, а вспоминать материал удобнее всего не по официальной документации или чужим статьям, а по собственному, скажем так, конспекту. Вместе с тем я старался построить текст так, чтобы он был удобен прежде всего для знакомства с Mockito с нуля, и кое-где подробно разбираю вроде бы очевидные вещи — не все из которых были для меня очевидными с самого начала.
Ссылки
- Ресурсы World of Warplanes
- Энциклопедия
- Тема на официальном форуме
Великобритания
Истребители | IIBristol Bulldog • IIIBristol Type 133 • IIIHawker P.V.3 • IIISupermarine Type 224 • IVBristol Type 146 • IVFairey Fantome • IVHawker Hurricane Mk. Ia • VCAC CA-12 Boomerang • VMiles M.20 • VSupermarine Spitfire I • VSupermarine Spitfire Mk Ia • VVickers Venom • VINorth American Mustang Mk.I • VINorth American Mustang IA • VISupermarine Spitfire V • VISupermarine Spitfire Vb IM • VIIGloster Meteor F. I • VIISupermarine Spitfire IX • VIIISupermarine Spitfire XIV • VIIIDe Havilland DH.100 Vampire F.1 • IXSupermarine Attacker • XSupermarine Swift |
Тяжёлые истребители | IVBristol Blenheim F • VBristol Beaufighter • VIDe Havilland 98 Mosquito • VIIDe Havilland 103 Hornet • VIIIWestland P.1056 • IXGloster P.228 • XGloster Javelin |
Многоцелевые истребители | IGloster Goldfinch • IIHawker Demon • IIIBlackburn Skua • IVHawker Hurricane Mk I • VHawker Hurricane Mk II • VHawker Hurricane IID • VIHawker Tornado • VIIHawker Typhoon • VIIISupermarine Seafang F.32 • VIIIHawker Tempest • IXHawker Sea Hawk • XHawker Hunter |
Штурмовики | IIICAC CA-1 Wirraway |
Бомбардировщики | IIIBristol Blenheim Mk.IV (ранний) |
Тяжёлые истребители
СССР | VIIТуполев Ту-1 |
Германия | IIAGO Ao 192 Kurier • IIIDornier Do 17 Z-7 Kauz • IIIFocke-Wulf Fw 57 • IIIJunkers Ju 52 • IVMesserschmitt Bf 110 B • IVMesserschmitt Bf 110 C-6 • VMesserschmitt Bf 110 E • VMesserschmitt Me 210 • VIMesserschmitt Me 410 Hornisse • VIIMesserschmitt Bf 109 Z Zwilling • VIIIBlohm und Voss BV P.203 • VIIIDornier Do 335 A-1 Pfeil • VIIIMesserschmitt Me 262 Schwalbe • IXMesserschmitt Me 262 HG II • XMesserschmitt Me 262 HG III |
Великобритания | IVBristol Blenheim F • VBristol Beaufighter • VIDe Havilland 98 Mosquito • VIIDe Havilland 103 Hornet • VIIIWestland P.1056 • IXGloster P.228 • XGloster Javelin |
США | VLockheed P-38F Lightning • VILockheed P-38J Lightning • VIGrumman XP-50 • VIIGrumman F7F Tigercat • VIIFisher XP-75 Eagle • VIIIChance-Vought XF5U Pancake • VIIINorth American P-82B Twin Mustang • VIIILockheed XP-58 Chain Lightning • IXMcDonnell F2H Banshee • XLockheed XF-90 |
Япония | VKawasaki Ki-45 Toryu • VIKawasaki Ki-102 • VIIRikugun Ki-93 • VIITachikawa Ki-94-I |
Китай | VIDe Havilland 98 Mosquito FB 26 |
Франция | VSNCASE SE 100 • VIIArsenal VB 10 |
A more meaningful example
Following is another application class which uses instance:
package com.logicbig.example; public class MyProcessor { private MyService myService; public MyProcessor(MyService myService) { this.myService = myService; } public String process() { int returnInteger = myService.doSomething(); return String.format("My Integer is: " + returnInteger); } }
Let’s mock again to test method:
package com.logicbig.example; import org.junit.Assert; import org.junit.Test; import org.mockito.Mockito; public class ProcessorTest { @Test public void processTest() { MyService myService = Mockito.mock(MyService.class); Mockito.when(myService.doSomething()).thenReturn(10); MyProcessor myProcessor = new MyProcessor(myService); String returnedValue = myProcessor.process(); Assert.assertEquals(returnedValue, "My Integer is: 10"); } }
D:\mockito-getting-started-creating-mocks>mvn test -Dtest="ProcessorTest" Scanning for projects... ----< com.logicbig.example:mockito-getting-started-creating-mocks >----- Building mockito-getting-started-creating-mocks 1.0-SNAPSHOT ----------------------------------------------------------------- --- maven-resources-plugin:2.6:resources (default-resources) @ mockito-getting-started-creating-mocks --- Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! --- maven-compiler-plugin:3.8.1:compile (default-compile) @ mockito-getting-started-creating-mocks --- Nothing to compile - all classes are up to date --- maven-resources-plugin:2.6:testResources (default-testResources) @ mockito-getting-started-creating-mocks --- Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ mockito-getting-started-creating-mocks --- Nothing to compile - all classes are up to date --- maven-surefire-plugin:2.12.4:test (default-test) @ mockito-getting-started-creating-mocks ---------------------------------------------------------- T E S T S-------------------------------------------------------Running com.logicbig.example.ProcessorTestTests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.694 secResults :Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 ------------------------------------------------------------------------ BUILD SUCCESS ------------------------------------------------------------------------ Total time: 3.798 s Finished at: 2020-04-17T00:20:03-05:00 ------------------------------------------------------------------------
Общие методы проверки
Название метода | Описание метода |
---|---|
after(long millis) | Проверка по истечении заданного времени |
timeout(long millis) | Убедитесь, что время выполнения метода истекло |
atLeast(int minNumberOfInvocations) | Выполните как минимум n проверок (n является параметром) |
atMost(int maxNumberOfInvocations) | Выполнить не более n проверок (n является параметром) |
description(String description) | Что выводится при сбое проверки |
times(int wantedNumberOfInvocations) | Проверьте, сколько раз вызывается метод |
never() | Убедитесь, что взаимодействие не произошло, что эквивалентно временам (0) |
only() | Метод проверки вызывается только один раз, что эквивалентно times (1) |
пример
More info
Main reference documentation features:
-
/: create mock
- optionally specify how it should behave via /
- / to specify how a mock should behave
- If the provided answers don’t fit your needs, write one yourself extending the interface
-
/:
partial mocking, real methods are invoked but still can be verified and stubbed - : automatically inject mocks/spies fields annotated with or
-
: to check methods were called with given arguments
- can use flexible argument matching, for example any expression via the
- or capture what arguments were called using instead
- Try Behavior-Driven development syntax with BDDMockito
- Use Mockito on Android, thanks to the team working on dexmaker
Stubbing methods
Subbing is defining of what values to return when we invoke methods of a mock object.
Stubbing is achieved by Mockito’s when-thenReturn methods.
Let’s see how to do stubbing for our interface :
package com.logicbig.example; import org.junit.Assert; import org.junit.Test; import org.mockito.Mockito; public class MyServiceTest2 { @Test public void testDoSomething2(){ MyService mock = Mockito.mock(MyService.class); Mockito.when(mock.doSomething()).thenReturn(10);//stubbing int i = mock.doSomething(); Assert.assertEquals(i, 10); } }
D:\mockito-getting-started-creating-mocks>mvn test -Dtest="MyServiceTest2" Scanning for projects... ----< com.logicbig.example:mockito-getting-started-creating-mocks >----- Building mockito-getting-started-creating-mocks 1.0-SNAPSHOT ----------------------------------------------------------------- --- maven-resources-plugin:2.6:resources (default-resources) @ mockito-getting-started-creating-mocks --- Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! --- maven-compiler-plugin:3.8.1:compile (default-compile) @ mockito-getting-started-creating-mocks --- Nothing to compile - all classes are up to date --- maven-resources-plugin:2.6:testResources (default-testResources) @ mockito-getting-started-creating-mocks --- Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ mockito-getting-started-creating-mocks --- Nothing to compile - all classes are up to date --- maven-surefire-plugin:2.12.4:test (default-test) @ mockito-getting-started-creating-mocks ---------------------------------------------------------- T E S T S-------------------------------------------------------Running com.logicbig.example.MyServiceTest2Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.916 secResults :Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 ------------------------------------------------------------------------ BUILD SUCCESS ------------------------------------------------------------------------ Total time: 4.132 s Finished at: 2020-04-17T00:10:42-05:00 ------------------------------------------------------------------------
Пользовательский ответ (Ответ)
Для набора параметров метода когда … thenXxx или doXxxx … когда комбинация, Mockito предоставил пользовательский метод ответа, позволяющий настроить содержимое ответа метода. Представьте, что в обратном вызове асинхронного метода есть несколько обратных вызовов (конечно, типом возврата является Void). Когда вы хотите указать выполнение обратного вызова, это, очевидно, нелегко реализовать. Если вы настроите содержимое ответа, это будет очень просто, пример кода выглядит следующим образом:
Или приведите простой пример (используя метод when … thenAnswer):
Очевидно, что окончательный результат здесь:
mock и spy
Центральный класс Mockito, через который предполагается обращаться к большей части функционала, — это, собственно, класс под названием (есть также класс , предоставляющий примерно те же возможности в форме, более подходящей для BDD, но здесь я не стану на нём останавливаться). Доступ к функционалу реализован через его статические методы.
Чтобы создать mock класса , я должен сделать всего лишь следующее:
Готово — я получил экземпляр нужного мне класса. Он будет принят любым методом или конструктором, которому требуется параметр такого типа (например, конструктором того класса, который я хочу протестировать). Даже если далее его ожидает проверка с пристрастием, он её пройдёт: не только вернёт , но и — именно . Каким-то формальным образом программно отличить mock-объект от обычного оказывается довольно непростой задачей, что и логично: ведь первый предназначен как раз для того, чтобы быть неотличимым от второго. Однако в составе Mockito для этого есть инструмент — метод . Передав ему произвольный объект, я получу объект класса . Он содержит информацию о том, что этот объект представляет собой с точки зрения Mockito: является ли он mock, spy (см. ниже), как использовался, как был создан и прочее.
Особо нужно упомянуть ситуацию, когда я пытаюсь создать mock для final класса или mock-экземпляр enum либо переопределить поведение final метода. В таком случае при поведении Mockito по умолчанию код выше откажется работать, сославшись именно на это обстоятельство. Однако это можно изменить — достаточно создать в проекте (при стандартном устройстве проектного дерева каталогов) файл и вписать в него строчку:
После этого можно имитировать обычным способом final классы и enum’ы, а также переопределять final методы.
Полученный мной mock в действии максимально безлик: ни один метод при вызове не окажет никакого воздействия на что бы то ни было, а возвращённое значение окажется для объектных типов и для примитивных
Обратите внимание: если метод возвращает коллекцию, mock’ом по умолчанию будут возвращены не ‘ы, а пустые экземпляры коллекций. Например, для это окажется пустой независимо от того, что должен был возвращать реальный метод
А вот в качестве значений массивов, примитивных или объектных, я получу . Поведение по умолчанию (и не только его) можно изменить при помощи функционала класса , но это нечасто бывает нужно.
Так или иначе, в большинстве случаев мне понадобится не поведение по умолчанию, и в следующем разделе я подробно разберу, как задавать вместо него то, которое требуется.
Однако что, если я хочу использовать в качестве заглушки объект реального класса с имеющимся функционалом, переопределив работу только части его методов? Если речь о юнит-тестировании, такая потребность обычно (но не всегда) свидетельствует о том, что в проекте не всё в порядке с дизайном, и в принципе так действовать не рекомендуется. Однако случаются ситуации, когда этого по какой-то причине не избежать. На этот случай в Mockito есть так называемые spy, «шпионы». В отличие от mock’ов, их можно создавать на основе как класса, так и готового объекта:
При создании spy на основе класса, если его тип — интерфейс, будет создан обычный mock-объект, а если тип — класс, то Mockito попытается создать экземпляр при помощи конструктора по умолчанию (без параметров). И только если такого конструктора нет, произойдёт ошибка и тест не сработает.
Поведение spy-объектов по умолчанию идентично поведению обычного экземпляра класса, однако они дают мне те же возможности, что и mock-объекты: позволяют переопределять их поведение и наблюдать за их использованием (см. следующие разделы). Важный момент: spy — не обёртка вокруг того экземпляра, на основе которого он создан! Поэтому вызов метода spy на состояние изначального экземпляра не повлияет.
Mockito: что это такое и зачем нужно
Говоря коротко, Mockito — фреймворк для работы с заглушками.
Как известно, при тестировании кода (прежде всего юнит-тестировании, но не только) тестируемому элементу часто требуется предоставить экземпляры классов, которыми он должен пользоваться при работе. При этом часто они не должны быть полнофункциональными — наоборот, от них требуется вести себя жёстко заданным образом, так, чтобы их поведение было простым и полностью предсказуемым. Они и называются заглушками (stub). Чтобы их получить, можно создавать альтернативные тестовые реализации интерфейсов, наследовать нужные классы с переопределением функционала и так далее, но всё это достаточно неудобно, избыточно и чревато ошибками. Более удобное во всех смыслах решение — специализированные фреймворки для создания заглушек. Одним из таковых (и, пожалуй, самым известным для Java) и является Mockito.
Mockito позволяет создать одной строчкой кода так называемый mock (что-то вроде основы для нужной заглушки) любого класса. Для такого mock сразу после создания характерно некое поведение по умолчанию (все методы возвращают заранее известные значения — обычно это либо ). Можно переопределить это поведение желаемым образом, проконтролировать с нужной степенью детальности обращения к ним так далее. В результате mock и становится заглушкой с требуемыми свойствами. Ниже я подробно разберу, как это сделать.
Отмечу, что mock можно создать и для тех классов, новый экземпляр которых вообще-то так просто не создашь, в частности, классов с исключительно приватными конструкторами типа синглтонов и утилитных классов, а при минимальной настройке фреймворка — и перечислений (enums).
Использование Mockito и PowerMock
Выше приведены три исходных файла, которые необходимо использовать, а ниже приведены примеры каждого макета. 1. Макет интерфейса, который является обычным макетом. Функция mock () может вызывать mockito или powermock.
2. Mock Normal Class, это тоже обычный mock, вы можете использовать метод mockito или powermock.
3. Макет финального класса, этот вид макета должен использовать powermock, а чтобы использовать powermock, необходимо добавить две аннотации в тестовый класс. Класс в @PrepareForTest — это класс метода, который вы хотите имитировать.
4. Mock Private Method. Этот тип Mock также должен использовать powermock. Код, который я демонстрирую ниже, использует spy. Это потому, что spy — это частичный mock. Здесь я хочу только имитировать getPrivateMethod () вместо mock callPrivateMethod. Но mock реструктурирует все методы в классе, что не приведет к тестированию частных методов.
Второй метод — использовать метод-заглушку для имитации частного. Я не буду здесь подробно останавливаться на этом методе. Я подробно расскажу об этом использовании в следующей статье. 5. Имитация статического метода, этот метод также должен использовать powermock.
6. Mock Constructor, этот метод также должен полагаться на powermock.
7. Mock Enum, этот метод также должен полагаться на powermock.
Здесь нужно обратить внимание на Whitebox.setInternalState
Второй параметр — это имя экземпляра перечисления.Существует два экземпляра перечисления, N и S. Мне здесь нужен только фиктивный экземпляр N, поэтому здесь указан экземпляр N. Экземпляр S. не будет затронут.
подводить итоги
Это введение в mockito и powermock. Вышеупомянутые методы могут охватывать большую часть нашей работы. В некоторых ситуациях, когда есть много вложений и много промежуточных переменных, нам нужно использовать их расширенные функции. Я перейду к следующей статье. расширенные возможности заглушки и powermock.
Модули
- Таблица
- Дерево
Двигатель
Уровень | Двигатель | Мощность двигателя, л.с. / Тяга | Тип | Масса, кг | Стоимость, |
---|---|---|---|---|---|
VII | NAME_MODULE_MERLIN-225_PR_SPEC_TOP_MOSQUITO-MK26_1 | 1620 | водяного охлаждения | 1500 | 80000 |
Конструкция
Уровень | Конструкция | Живучесть | Масса, кг | Стоимость, |
---|---|---|---|---|
VI | NAME_MODULE_MOSQUITO-MK26_PLANER-PR_SPEC_TOP_MOSQUITO-MK26_1 | 400 | 6400 | 60000 |
Фюзеляжное вооружение
Уровень | Пулемёт | Калибр | Начальная скорость снаряда, м/с | Урон | Скорострельность, выстр/мин | Масса, кг | Стоимость, |
---|---|---|---|---|---|---|---|
VI | 20-мм Hispano Mk.II (Ф) | 20 | 1360 | 90 | 400 | 90 | 37300 |
Фюзеляжное вооружение
Уровень | Пулемёт | Калибр | Начальная скорость снаряда, м/с | Урон | Скорострельность, выстр/мин | Масса, кг | Стоимость, |
---|---|---|---|---|---|---|---|
IV | WEAPON_NAME_G7MM-BROWNING-MK-2-CH-PR-F_SPEC_TOP_MOSQUITO-MK26_1 | 7.7 | 960 | 25 | 600 | 30 | 4500 |
Подвесное вооружение
Уровень | Бомбы | Радиус поражения, м | Урон | Масса, кг | Стоимость, |
---|---|---|---|---|---|
VI | WEAPON_NAME_500LB-CH-PR_SPEC_TOP_MOSQUITO-MK26_1 | 75 | 4300 | 227 | 1150 |
Подвесное вооружение
Уровень | Ракеты | Радиус поражения, м | Урон | Масса, кг | Стоимость, |
---|---|---|---|---|---|
VI | RP-3 SAP | 35 | 1000 | 37 | 500 |
Двигатель
VII
ДвигательNAME_MODULE_MERLIN-225_PR_SPEC_TOP_MOSQUITO-MK26_1
Характеристики: | |
Мощность двигателя, л.с. | 1620 |
Тип | водяного охлаждения |
Масса, кг | 1500 |
Применяемость:De Havilland 98 Mosquito FB 26
VII
2xNAME_MODULE_MERLIN-225_PR_SPEC_TOP_MOSQUITO-MK26_1
VII
ДвигательMerlin 225
Характеристики: | |
Мощность двигателя, л.с. | 1620 |
Тип | водяного охлаждения |
Масса, кг | 1500 |
Применяемость:De Havilland 98 Mosquito FB 26
VII
2xMerlin 225
Конструкция
VI
КонструкцияNAME_MODULE_MOSQUITO-MK26_PLANER-PR_SPEC_TOP_MOSQUITO-MK26_1
Характеристики: | |
Живучесть | 400 |
Масса, кг | 6400 |
Применяемость:De Havilland 98 Mosquito FB 26
VI
NAME_MODULE_MOSQUITO-MK26_PLANER-PR_SPEC_TOP_MOSQUITO-MK26_1
VI
КонструкцияMosquito FB 26
Характеристики: | |
Живучесть | 400 |
Масса, кг | 6400 |
Применяемость:De Havilland 98 Mosquito FB 26
VI
Mosquito FB 26
Фюзеляжное вооружение
VI
Пулемёт20-мм Hispano Mk.II (Ф)
Характеристики: | |
Калибр | 20 |
Начальная скорость снаряда, м/с | 1360 |
Урон | 90 |
Скорострельность, выстр/мин | 400 |
Масса, кг | 90 |
Применяемость:De Havilland 98 Mosquito FB 26
VI
4×20-мм Hispano Mk.II (Ф)
VI
Пулемёт
Характеристики: | |
Калибр | 20 |
Начальная скорость снаряда, м/с | 1360 |
Урон | 90 |
Скорострельность, выстр/мин | 400 |
Масса, кг | 90 |
Стоимость: | |
Стоимость покупки | 37300 |
Применяемость:De Havilland 98 Mosquito FB 26
VI
4x
Фюзеляжное вооружение
IV
Пулемёт.303 Browning Mk.II (Ф)
Характеристики: | |
Калибр | 7.7 |
Начальная скорость снаряда, м/с | 960 |
Урон | 25 |
Скорострельность, выстр/мин | 600 |
Масса, кг | 30 |
Применяемость:De Havilland 98 Mosquito FB 26
IV
4x.303 Browning Mk.II (Ф)
IV
ПулемётWEAPON_NAME_G7MM-BROWNING-MK-2-CH-PR-F_SPEC_TOP_MOSQUITO-MK26_1
Характеристики: | |
Калибр | 7.7 |
Начальная скорость снаряда, м/с | 960 |
Урон | 25 |
Скорострельность, выстр/мин | 600 |
Масса, кг | 30 |
Стоимость: | |
Стоимость покупки | 4500 |
Применяемость:De Havilland 98 Mosquito FB 26
IV
4xWEAPON_NAME_G7MM-BROWNING-MK-2-CH-PR-F_SPEC_TOP_MOSQUITO-MK26_1
Подвесное вооружение
Вооружение отсутствует
VI
Бомбы500 фн.
Характеристики: | |
Радиус поражения, м | 75 |
Урон | 4300 |
Масса, кг | 227 |
Стоимость: | |
Стоимость покупки | 1150 |
Применяемость:De Havilland 98 Mosquito FB 26
VI
2×500 фн.
VI
БомбыWEAPON_NAME_500LB-CH-PR_SPEC_TOP_MOSQUITO-MK26_1
Характеристики: | |
Радиус поражения, м | 75 |
Урон | 4300 |
Масса, кг | 227 |
Стоимость: | |
Стоимость покупки | 1150 |
Применяемость:De Havilland 98 Mosquito FB 26
VI
2xWEAPON_NAME_500LB-CH-PR_SPEC_TOP_MOSQUITO-MK26_1
Вооружение отсутствует
Подвесное вооружение
Вооружение отсутствует
VI
РакетыRP-3 SAP
Характеристики: | |
Радиус поражения, м | 35 |
Урон | 1000 |
Масса, кг | 37 |
Стоимость: | |
Стоимость покупки | 500 |
Применяемость:De Havilland 98 Mosquito FB 26
VI
8xRP-3 SAP
VI
Ракеты
Характеристики: | |
Радиус поражения, м | 35 |
Урон | 1000 |
Масса, кг | 37 |
Стоимость: | |
Стоимость покупки | 500 |
Применяемость:De Havilland 98 Mosquito FB 26
VI
8x
Вооружение отсутствует
Вооружение отсутствует
Премиумный самолет
Подарочный самолет