Mockito — overview
Содержание:
Боевое использование Де Хэвилленд «Москито»
Поставки бомбардировочных «Москито» велись довольно медленно — приоритетом пользовались истребительные и разведывательные части. 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% — намного ниже, чем у любого другого типа бомбардировщиков Королевских ВВС. Концепция скоростного невооруженного бомбардировщика полностью оправдала себя.
Боевое применение[ | код]
«Москито» выполняли «точечные» бомбометания, а также использовались как целеуказатели (англ. «pathfinders») при ночных бомбардировках немецких городов. В бомбардировочном варианте отсутствовало оборонительное стрелковое вооружение, характерное для бомбардировщиков того времени. Тем не менее, потери среди «Москито» были одними из самых низких из всех самолётов Второй мировой войны — 16 на 1000 вылетов. Объясняется это очень высокими для того времени лётно-техническими характеристиками: скорость и высота полёта делали их малоуязвимыми для германских истребителей и огня зенитной артиллерии.
Крейсерская скорость самолёта на высоте 11 км составляла 640—675 км/ч. Такие высотно-скоростные характеристики делали его практически недосягаемым для атак противостоящих им в то время Messerschmitt Bf.109G-6. Эффективно бороться с «Москито» могли только первые реактивные истребители немцев . Но и они не смогли в этом добиться больших успехов по ряду причин — из-за позднего появления в конце войны, нехватки опытных пилотов, небольшого количества произведённых самолётов, а также стремления Гитлера использовать Messerschmitt Me.262 в качестве бомбардировщика.
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);
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 на состояние изначального экземпляра не повлияет.
FIGHTER-BOMBER
With the success of the Mosquito as a night-fighting machine, the
logical step was to make it into a fighter-bomber operating by day.

Mosquito FB Mk.VI LR308
No.23 Sqn RAF
Malta
March 1944
The island of Malta was to be a thorn in the side of the Axis powers
that they were never able to remove. As in Europe the intruder Mosquitos
made their presence felt there by disrupting both land and sea communications.
Shown here is a black bottomed FB.VI of No.23 Sqn operating in the night-intruder
role.

Mosquito FB Mk.XVIII NT225
No.248 Sqn RAF
June 1944
All allied aircraft flying in European skies had black/white stripes
painted around their fuselages and wings prior to the D-Day invasion
of 6 June 1944. Originally these were around the entire fuselage and
wings as seen here on a 57mm cannon-armed FB Mk.XVIII ‘Tse-tse’ Mosquito.

Mosquito FB Mk.VI NS843
No.464 Sqn RAAF
September 1944
The painting of the D-Day stripes was a very haphazard affair as far
as placement of aircraft codes went. Some even had theirs covered up
as on this FB.VI of No.464 Sqn. Also note that by September 1944 the
wing stripes had been removed, leaving just the under fuselage ones
intact.

Mosquito FB Mk.VI HR405
No.143 Sqn RAF
One of the other uses of the day-raiding Mosquito was by the Banff
wing in an anti-shipping role. These aircraft were painted in an extra
dark sea gray on all upper surfaces and sky on the bottom. However close
examination of photos of these aircraft reveals that the EDSG is sprayed
over the previous camouflage and the dark green can faintly be seen.
HR405 also shows traces of the D-Day stripes on the upper fuselage.
Also note the repositioned serial due to the earlier adding of the D-Day
stripes.

Mosquito FB Mk.VI RS625
No.143 Sqn RAF
Another of No.143 Sqn’s FB.VIs is seen here. Note the green background
to the serial and the yellow and sky spinner.

Mosquito FB Mk.40 A52-41
No.5 OCU RAAF
December 1944
The Australian-built FB-40 was almost indentical to the British FB.VI
except for the substitution of Packard engines for the FB.VIs Merlins.
Mock-объекты как значения полей и аннотации Mockito
Если в классе теста есть поля, которым я хочу присвоить mock-объекты в качестве значений, это не обязательно делать вручную — достаточно снабдить его аннотацией и до каких-либо обращений к нему выполнить вот такой вызов:
(несмотря на название, этот метод предназначен не только для mock’ов, а задействует также и все нижеперечисленные аннотации)
Для spy предусмотрена аннотация — она в целом аналогична … но для spy может использоваться объект, на основе которого он будет создан, помните? Такой объект можно сразу указать в качестве значения аннотируемого поля, но можно и не указывать — тогда spy будет создан на основе класса.
Есть аннотация для создания экземпляров — о ней отдельно, пожалуй, больше ничего не скажешь.
Ещё существует . Помеченное таким образом поле инициализируется не какой-то исчадием Mockito, а самым что ни на есть настоящим объектом указанного класса. Его поля по возможности проинициализированы значениями mock-полей моего тестового класса, помеченных соответствующей аннотацией. Для этого используется конструктор с наибольшим числом параметров, сеттеры и так далее. Если какого-то объектного параметра конструктора не хватает, вместо него будет использован , а вот параметр-примитив просто не позволит тесту сработать. В целом это похоже на маленькую и простую (и всё равно не такую уж примитивную) реализацию dependency injection.
FOREIGN
The Mosquito was operated by many diverse countries in the immediate
postwar period. Some of which are shown here.

Mosquito FB Mk.VI
Nationalist Chinese Air Force
1948-1950
China acquired over 200 Mosquitos, all were Canadian built and of
various marks including the FB.26 (Canadian-built FB.VI). They eventually
equipped three squadrons, and saw some combat in 1948/49 before the
Nationalist forces retreated to Taiwan. Finish is OD upper surfaces
and medium gray lower.

Mosquito FB Mk.VI RF823
Czechoslovakian Air Force
1945-1950
Following the end of WW2, 19 Mosquito FB.VIs were flown by the Czech
Air Force. Despite an arms embargo, No.311 Sqn managed to keep their
Mosquitos operational by using surplus German guns. During 1950 western
aircraft were phased out in favour of Soviet types, with the Mosquito
being replaced by the Il-2. Standard RAF camouflage is carried with
Czech markings.

Mosquito FB Mk.VI
Dominican Air Force
circa 1950
The Dominican Republic acquired five FB.VIs. Later supplemented by
some T.27s. Although a roundel is shown on the port undersurface, it
is more likely that the serial 2102 was carried here as it appears on
the upper starboard wing, and the roundel on the lower starboard wing
of another Mosquito.

Mosquito NF Mk.XIX 30022
Swedish Air Force
1950
Sweden bought sixty ex-RAF NF.XIX Mosquitos in 1948, and gave them
the designation J30. Upon delivery, the first, second, and third squadrons
of the F1 Wing was equipped with the type and appropriate markings were
painted on; The first squadron had white spinners and code letters,
the second squadron blue spinners and code letters, and the third squadron
yellow spinners and code letters. The letters were outlined in white,
except for the first squadron, which were outlined in black. Later the
first squadron changed from white to red for their colors, outlining
the letters in white. The J30 had a short life in the Flygvapnet, being
in front line service for only 6 years. The J30 was replaced by the
Venom, a much more powerful night-fighter.

Mosquito FB Mk.VI
Turkish Air Force
1947-1950
Turkey purchased 142 Mosquitos, of which 137 were FB.Vis. The Turkish
Air Force operated their Mosquitos until 1954.

Mosquito PR.XVI 90
Israeli Defence Force
Syria, 1956
Israel was one of the last countries to fly the Mosquito into combat,
using ex-French and Royal Navy PR. XVI Mosquitos in the Suez crisis
of 1956. While most Israeli PR Mosquitos were silver overall, a small
number of them were camouflaged in the standard sand and blue over duck
egg green. The Mosquito shown here was flown on a recce mission over
Syria in November of 1956 by Ze’ev Tavor and navigator Rafael Sivron
when it suffered some damage. While it made it back to Israel, the resultant
forced landing effectively wrote off #90.
Откат поведения к дефолтному и сессии Mockito
Если в моём тестовом классе всего один тестирующий метод, всё отлично: я создал mock (spy, argument captor…), задал ему поведение, использовал его в тесте, всё. Но если их больше, а mock’и — это поля тестового класса, инициализация которых была выполнена лишь единоды (скажем, в случае TestNG — методом, аннотированным ), то заданное в одном методе поведение будет оставаться в силе и в других, выполняемых после него. Это, скорее всего, не нужно — тем более, что порядок выполнения тестовых методов в общем случае не гарантирован.
Чтобы этого избежать, нужно до вызова каждого тестового метода (непосредственно перед его вызовом либо после вызова предыдущего; в частности, у TestNG есть для этого аннотации и ) тем или иным способом привести все mock-объекты в состояние по умолчанию. После этого часто бывает удобно заново задать желаемое поведение для mock’ов в той степени, в которой оно общее для всех тестовых методов, чтобы на долю самих методов осталось лишь задание специфических деталей.
Простой и очевидный, но не очень удобный способ, — передать все mock’и методу . После этого они «забудут» всё, чему я их до этого «научил». Этот подход несколько гибче других: в некоторых редких случаях (например, когда тестирующие методы следуют друг за другом в заданном порядке и составляют единый сценарий) может оказаться, что поведение части mock’ов я откатывать не хочу, — тогда достаточно не передавать их этому методу. Также он порой может пригодиться, чтобы вернуть поведение mock по умолчанию в ходе работы тестирующего метода. Впрочем. авторы не рекомендуют пользоваться , утверждая, что необходимость в его вызове внутри тестирующего метода указывает на низкое качество тестов.
При использовании аннотаций доступен другой способ (пожалуй, самый популярный) — просто вызывать каждый раз . Это позволит переинициализировать «начисто» все поля, помеченные аннотациями Mockito.
Ещё одно решение — использовать так называемые сессии Mockito. Именно его рекомендуют авторы. В начале сессии все mock-объекты инициализируются, а после окончания (обязательного) — перестают действовать. Это позволяет более чётко контролировать происходящее. Если я хочу создавать отдельную сессию для каждого тестового метода, то удобно создать поле типа , присвоить ему значение до вызова тестового метода и завершить сессию после. Вот пример для случая TestNG:
PHOTO-RECONNAISSANCE
The first Mosquito to fly operationally was a PR Mk.I on 17 September
1941. From the start the PRU Mossies were in one basic scheme — PRU
blue. As usual with RAF PRU aircraft, type B roundels were carried.

Mosquito PR Mk.XVI NS502
No.544 Sqn RAF
Summer 1944
Seen here in the standard D-Day attire, NS502 has had its serial repainted
over the white of the stripes. The slipper tank is painted black to
conform with the wing stripes.

Mosquito PR Mk.XVI NS644
No.680 Sqn RAF
Foggia, Italy
1944
After a few nasty incidents with friendly aircraft attacking their
Mosquitos, No.680 Sqn took to painting the fin and rudder in red/white
stripes to differentiate them from German Me410s. Also note the hastily
applied D-Day stripes on the fuselage — not everyone managed to get
them nice and straight.

Mosquito PR Mk.XVI MM357
SEAC Theatre
March 1945
In addition to Europe and the Mediterranean, the Mosquito was also
used in South East Asia. The overall siver MM357 has the theatre markings
of blue/light blue (or white) roundels and fin flash as well as black
bands on the fin and stabilizer.
The next largest user of PR Mosquitos after the RAF was the USAF. As
with their British conterparts, the USAF PRU Mossies carried overall
PRU blue finish.

Mosquito PR Mk.XVI NS510
653rd BS, 25th BG, 8th AF USAF
June 1944
As with other aircraft operating over Europe in June 1994, NS510 carries
full D-Day stripes.

Mosquito PR Mk.XVI MM389
654rd BS, 25th BG, 8th AF USAF
January 1945
An intriguing black bottomed PR.XVI

Mosquito PR Mk.XVI NS591
25th BG, 8th AF USAF
February 1945
Along with the PRU Mossies of No.680 Sqn, the re-tailed USAF must
be considered the most colourful of an already attractive design. Note
the D-Day stripes still carried at this late date.
Конструкция[ | код]
Двухмоторный высокоплан с двигателями с компрессорами наддува, спроектированными для работы на больших высотах (самолёт имел потолок полёта до 11 000 метров). Экипаж 2 человека.
В конструкции самолёта была применена толстая трёхслойная обшивка с внешними слоями из фанеры и внутренним из бальсы с еловыми вставками для прочности, оклеенная поверх полотном, что позволило достичь требуемой прочности при малом весе конструкции. Немецкие радары были не в состоянии своевременно засекать приближающийся «Москито», так как у этого самолёта только двигатели и некоторые элементы управления были сделаны из металла.
BOMBER Mk.IV/FIGHTER Mk.II

Mosquito B Mk.IV DK333
PO Stephens/Ruskell
No.109 Sqn RAF
The first pattern carried by the Mosquitos was that seen on the other
aircraft of Bomber Command — brown/green topsides with black undersurfaces.
Aircraft codes and serials are in dull red.

Mosquito B Mk.IV DZ367
No.105 Sqn RAF
The next pattern seen on Bomber Command Mossies was gray/green upper
surfaces and sky under surfaces along with light gray codes and black
serials.

Mosquito B Mk.IV G-AGFV
During the war, Britain needed to keep in contact with neutral Sweden
for such materials as precision-machined ball bearings and machine-tool
steel. BOAC initially operated a pair of Lockheed Lodestars for this
route, but the performance of the Lodestar resulted in it only being
flown in bad weather and clouds to protect it from fighter interception.
BOAC sought a replacement, and after refusing the government’s suggestions
of Whitleys and Albermarle, the Mosquito was selected. The first BOAC
Mosquitos were B. Mk. IVs, followed by FB. Mk. VIs. With the Mosquito,
interception by the Luftwaffe was unlikely, and the lines of communication
remained open between England and Sweden. G-AGFV is seen in standard
RAF camouflage, the only additions being its civil registration and
a large red/white/blue horizontal stripe on the fuselage.

Mosquito NF Mk.II W4082
No.157 Sqn RAF
March-August 1942
The Mosquito was early on recognized as being suitable for modification
into the fighter role. As such they were fitted with four 20mm cannon
and four .303 machine guns. At the same time the need for night-fighters
was becoming apparent and the Mosquito NF Mk.II was created by mating
the F Mk.II with the Mk.IV AI (Airborne Intercept) radar — the result
being the NF Mk.II. The only external difference was the arrowhead aerial
on the nose and dipoles on the wingtips. These early Mosquitos were
finished in a special matt black paint that was supposed to lessen the
likelihood of being seen at night. Note the type A1 roundel and the
early fin flash.

Mosquito NF Mk.II (Intruder) DD712
No.23 Sqn RAF
November 1942
The desire to take the war to the enemy led to many types of aircraft
being employed in the intruder role. These aircraft roamed over Europe
at night and were directed to cause the maximum disruption to the enemy’s
lines of communications as possible. One favoured tactic was to wait
in the vicinity of a German airfield and shoot down any returning aircraft
careless enough to think it was safely at home. The NF.IIs employed
on this function had their radar removed. . and were to all intents
and purposes standard F Mk.IIs. DD712 shows the next step in NF markings.
. the roundel is now type C1, while the fin flash has had its white
centre stripe reduced in width.

Mosquito NF Mk.II (Intruder) DZ716
No.605 Sqn
For night-fighters, matte black finish was found to less helpful in
concealment at night, Therefore most were refinished in an overall gray
with green disruptive camouflage. However as the NF Mk.II (Intruder)
was still operating in an environment where searchlights were a real
danger, many kept their black bottom surfaces, even after adding the
gray/green uppers.
Выпуск бомбардировщиков
В сентябре 1941 года в виде бомбардировщика был собран восьмой «Москито», заложенный первоначально как разведчик типа PR Mk1. Этот самолет прибыл в ААЕЕ в Боскомб-Даун 27 сентября. За ним 18 октября туда же последовал первый из девяти серийных бомбардировщиков В MkIV Srs.1 (известных также как «переходный разведчик-бомбардировщик», поскольку первоначально заказывали разведчики, а завершили их как бомбардировщики). Обозначение Srs.1 (серия 1) показывало, что самолеты имеют первоначальные короткие обтекатели мотогондол. Все более поздние самолеты имели удлиненные гондолы, введенные для противодействия бафтингу.

MkIV Srs.1 вид сбоку
Оставшиеся В MkIV считались серией 2 (Srs.2) и кроме удлиненных мотогондол имели два подкрыльных подвесных гладко прилегающих бака по 227 литра. Первоначальные бомбардировочные варианты «Москито» были оснащены моторами «Мерлин 21» и «Мерлин 23», и могли нести на внутренней подвеске бомбовую нагрузку в 908 кг: две бомбы по 454 кг или четыре по 227 кг. Перед концом 1941 года прототип бомбардировщика был использован для испытания подкрыльных пилонов, которые сперва были рассчитаны на одну бомбу в 227 кг под каждым крылом. Такой вариант в серии должен был называться В MkV, но серийного производства не было, хотя модифицированный прототип иногда упоминался под этой маркой.

MkIV Srs.1 вид спереди
Всего было выпущено 300 «Москито» В.IV Srs 2. Поставка их началась в апреле 1942 года. Девять из них были собраны в других модификациях, а 27 были позднее переделаны в разведчики. В качестве первой части, подлежащей перевооружению на бомбардировщики «Москито», была выбрана 105-я эскадрилья. Но необходимость удовлетворять потребности истребительных и фоторазведывательных частей привела к тому, что поставка машин поначалу осуществлялась очень медленно. С 15 ноября 1941 года по середину мая 1942 года прибыли только девять В Mk1V Srs.1, использовавшиеся для переучивания экипажей и ознакомительных полетов.

MkIV Srs.1 вид сверху
Первые самолеты серии 2 поступили в эскадрилью в середине мая, когда она располагалась в Хоршэм-Сент-Фэнс (сейчас аэропорт Норвича). Однако четыре Srs.1 были использованы при первых боевых вылетах. 31 мая самолеты поодиночке с интервалами нанесли удар по Кельну; это было непосредственно перед первым рейдом «1000 бомбардировщиков» на этот город. Первые операции не принесли заметных успехов — частично из-за «младенческих болезней» первых серийных самолетов, но в большей степени из-за необходимости отработать лучшую тактику их применения.
«Москито» В.IV Srs.2 вид сбоку
Новые варианты самолетов
Совершенствование бомбардировщиков шло главным образом по линии повышения бомбовой нагрузки и усовершенствования силовой установки. Первый из 10 первых серийных бомбардировщиков был использован как опытная машина с установкой крыльевых бомбодержателей вместо стандартных подвесных баков по 227 литров, стоявших на В Mk1V Srs2.

«Москито» В Mk.IX вид сбоку
| Модель | Mosquito B Mk.IV |
| Экипаж, человек | 2 |
| Размах крыла, м | 16,51 |
| Длина, м | 12,43 |
| Высота, м | 4,65 |
| Площадь крыла, м2 | 42,18 |
| Масса, кг пустого самолета | 6080 |
| Масса, кг нормальная взлетная | 9900 |
| Масса, кг максимальная взлетная | 10152 |
| Тип двигателя | 2 ПД Rolls-Royce Merlin 21 |
| Мощность, л.с. | 2 х 1480 |
| Максимальная скорость , км/ч | 619 |
| Крейсерская скорость , км/ч | 491 |
| Скороподъемность, м/мин | 816 |
| Практический потолок, м | 10400 |
| Вооружение | Бомбовая нагрузка до 908 кг одна 454 кг бомба и две 227-кг бомбы или четыре 227-кг бомбы |

В.МкХХ вид сбоку
Example
Step 1 − Create an interface called CalculatorService to provide mathematical functions
File: CalculatorService.java
public interface CalculatorService {
public double add(double input1, double input2);
public double subtract(double input1, double input2);
public double multiply(double input1, double input2);
public double divide(double input1, double input2);
}
Step 2 − Create a JAVA class to represent MathApplication
File: MathApplication.java
public class MathApplication {
private CalculatorService calcService;
public void setCalculatorService(CalculatorService calcService){
this.calcService = calcService;
}
public double add(double input1, double input2){
return calcService.add(input1, input2);
}
public double subtract(double input1, double input2){
return calcService.subtract(input1, input2);
}
public double multiply(double input1, double input2){
return calcService.multiply(input1, input2);
}
public double divide(double input1, double input2){
return calcService.divide(input1, input2);
}
}
Step 3 − Test the MathApplication class
Let’s test the MathApplication class, by injecting in it a mock of calculatorService. Mock will be created by Mockito.
File: MathApplicationTester.java
package com.tutorialspoint.mock;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;
// @RunWith attaches a runner with the test class to initialize the test data
@RunWith(MockitoJUnitRunner.class)
public class MathApplicationTester {
private MathApplication mathApplication;
private CalculatorService calcService;
@Before
public void setUp(){
mathApplication = new MathApplication();
calcService = mock(CalculatorService.class);
mathApplication.setCalculatorService(calcService);
}
@Test
public void testAddAndSubtract(){
//add the behavior to add numbers
when(calcService.add(20.0,10.0)).thenReturn(30.0);
//subtract the behavior to subtract numbers
when(calcService.subtract(20.0,10.0)).thenReturn(10.0);
//test the subtract functionality
Assert.assertEquals(mathApplication.subtract(20.0, 10.0),10.0,0);
//test the add functionality
Assert.assertEquals(mathApplication.add(20.0, 10.0),30.0,0);
//verify call to add method to be completed within 100 ms
verify(calcService, timeout(100)).add(20.0,10.0);
//invocation count can be added to ensure multiplication invocations
//can be checked within given timeframe
verify(calcService, timeout(100).times(1)).subtract(20.0,10.0);
}
}
Step 4 − Execute test cases
Create a java class file named TestRunner in C:\> Mockito_WORKSPACE to execute Test case(s).
File: TestRunner.java
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(MathApplicationTester.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Step 5 − Verify the Result
Compile the classes using javac compiler as follows −
C:\Mockito_WORKSPACE>javac CalculatorService.java MathApplication. java MathApplicationTester.java TestRunner.java
Now run the Test Runner to see the result −
C:\Mockito_WORKSPACE>java TestRunner
Verify the output.
true
Previous Page
Print Page
Next Page