Макет об'єкта

Макети об'єктів (англ. Mock Object) у об'єктно-орієнтованому програмуванні - це об'єкти, що імітують поведінку справжніх об'єктів контрольованими способами, тобто, реалізують інтерфейси справжніх об'єктів, але не мають власної реальної функціональності. Програміст зазвичай створює макет об'єкта для тестування поведінки деяких інших об'єктів, багато в чому так само, як автомобільний дизайнер використовує манекен, що може рухатися, для імітації динамічної поведінки людини в транспортній аварії.

Де варто використовувати

У модульному тестуванні, фіктивні об'єкти можуть моделювати поведінку складних, реальних (не макетних) об'єктів і, отже, корисні, коли реальний об'єкт недоцільно або неможливо використати в модульному тесті. Якщо об'єкт має будь-яку з наведених нижче характеристик, використання фіктивного об'єкту може бути корисним в цьому випадку:

  • надає недетерміновані результати (наприклад, час або температуру);
  • є сценарії, які важко створити або відтворити (наприклад, помилка в мережі);
  • повільно працює (наприклад, повна база даних, яка повинна бути ініціалізована до початку тестування);
  • об'єкт ще не існує або може змінити поведінку;
  • об'єкт повинен включати в себе інформацію і методи виключно для цілей тестування (а не для реального використання).

Наприклад, створюється програма, що реагує на показники датчика, що вимірює температуру у приміщенні. Необхідно перевірити, що у програмі виникне попередження, якщо температура у приміщенні впаде нижче деякого рівня. Реально знижувати температуру приміщення - складно та недоцільно. Тому виправданим є створення макету для датчика температури, що надає дані про температуру у такому ж форматі, що і реальний датчик, але програміст має змогу керувати даними, що повертає такий датчик.

Типи макетних об'єктів

Макетні об'єкти можуть лише повертати вказані результати або також запам'ятовувати факт викликів своїх методів, та, якщо у тестовому сценарії, де обов'язково тестований об'єкт мав викликати деякий метод макетного об'єкта, але не зробив цього, повідомляти про невиконання тесту. Також існують макетні об'єкти, що просто реалізують інтерфейс реальних (деякою порожньою реалізацією), і програміст не може керувати ними.

Деталі використання

Макетні об'єкти та реальні об'єкти, які вони імітують, мають однакові інтерфейси, що дозволяє клієнту об'єкта не відчувати різниці, реальні об'єкти він використовує чи фіктивні. Сучасні фреймворки для модульного тестування дозволяють програмісту легко створювати макетні об'єкти заданого інтерфейсу або базового типу, вказувати необхідний результат для викликів методів та властивостей макетних об'єктів, вказувати, які параметри мають бути передані тому чи іншому методу, які методи чи властивості взагалі мають викликатися - факт усіх обов'язкових для тесту викликів методів макетного об'єкту може бути перевірено у модульному тесті.

Засоби автоматизації створення

Для мови програмування C Sharp :

Для мови програмування Python :

Для мови програмування Ruby on Rails :

Застереження щодо використання

Використання макетних об'єктів може прив'язати юніт-тести до фактичної реалізації коду, який проходить випробування. Наприклад, фреймворків для юніт-тестування дозволяють розробнику перевіряти, скільки разів і у якому порядку тестований об'єкт викликає макетний об'єкт; рефакторинг може змінити порядок таких викликів, і, при тому що фактично код залишатиметься робочим, тест буде не пройдено. Такі тести називають крихкими. Це доводить, що макетний об'єкт має імітувати лише зовнішню поведінку справжнього, і не прив'язуватися до деталей внутрішньої реалізації.

Реалізація

Нехай, наша аплікація містить операції із конвертуванням грошей. У ній присутній наступний сервіс.

public interface ICurrencyExchange
{
     Task<Money> Convert(Money originalAmount, Currency destinationCurrency);
}

Щоб перевірити роботу логіки, яке залежить на цьому сервісі створимо імітацію необхідної нам поведінки.

var mock = new Mock<ICurrencyExchange>();
mock
  .Setup(x => x.Convert(It.IsAny<Money>(), It.Is<Currency>(c => c == Currency.Euro)))
  .ReturnsAsync(new Money(10, Currency.Euro));

ICurrencyExchange currencyExchange = mock.Object;

Зв'язок з іншими патернами

  • Макет об'єкта та заглушка сервісу часто плутають. Та варто розуміти, що макет об'єкта використовуються для імітації поведінки однієї чи декількох функцій та залежно від умов ця імітація може відрізнятись в той час, як заглушка сервісу замінює цілий сервіс та його реалізація залишається незмінною.

Див. також

Read other articles:

Amerika Serikat1861–1865 Bendera(1861-1863) Segel Peta pembagian negara bagian dalam Perang Saudara Amerika (1861–1865).   Persatuan Amerika pada tahun 1861   Klaim yang dibuat oleh Persatuan StatusKeadaan pantatIbu kotaWashington D.C.Bahasa yang umum digunakan Inggris (utama) Belanda Jerman Bahasa asli Amerika Berbagai bahasa minor lainnya Agama Mayoritas:Kristen ProtestanMinoritas:Kristen KatolikYahudiAgama-agama asli AmerikaPemerintahanRepublik konstitusional p...

 

2016 studio album by Bruno Mars 24K MagicStudio album by Bruno MarsReleasedNovember 18, 2016 (2016-11-18)Recorded2015–2016StudioGlenwood Place (Burbank, California)Genre R&B funk pop new jack swing Length33:28LabelAtlanticProducer Emile Haynie Jeff Bhasker Shampoo Press & Curl The Stereotypes Bruno Mars chronology Unorthodox Jukebox(2012) 24K Magic(2016) An Evening with Silk Sonic(2021) Singles from 24K Magic 24K MagicReleased: October 7, 2016 That's What I LikeRe...

 

يفتقر محتوى هذه المقالة إلى الاستشهاد بمصادر. فضلاً، ساهم في تطوير هذه المقالة من خلال إضافة مصادر موثوق بها. أي معلومات غير موثقة يمكن التشكيك بها وإزالتها. (نوفمبر 2019) كأس الكؤوس الإفريقية 1977 تفاصيل الموسم كأس الكؤوس الأفريقية  النسخة 3  المنظم الاتحاد الأفريقي لكرة ...

Esta página cita fontes, mas que não cobrem todo o conteúdo. Ajude a inserir referências. Conteúdo não verificável pode ser removido.—Encontre fontes: ABW  • CAPES  • Google (N • L • A) (Outubro de 2021) Agostino Casaroli Cardeal da Santa Igreja Romana Cardeal Secretário de EstadoVice-Decano do colégio dos cardeais Info/Prelado da Igreja Católica200px Atividade eclesiástica Diocese Diocese de Roma Nomeação 1 de julho...

 

De Spieghel Historiael van Jacob van Maerlant Geschiedenis van België Tijdlijn · Bibliografie ..Naar chronologie Prehistorie Brons- en ijzertijd Oude Belgen Romeins België Gallo-Romeinse periode Frankisch België Opkomst van de steden en vorstendommen Middeleeuwen Geschiedenis van de Bourgondische Nederlanden Habsburgse tijd Geschiedenis van de Habsburgse Nederlanden Geschiedenis van de Spaanse Nederlanden Zuidelijke Nederlanden Geschiedenis van de Oostenrijkse Nederlanden Geschiedenis van...

 

Bernardinus van Sienakerk Plaats Krakau Denominatie Rooms-Katholieke Kerk Gewijd aan Bernardinus van Siena Coördinaten 50° 3′ NB, 19° 56′ OL Gebouwd in 1454-1455, 1659-1680 Uitbreiding(en) 17e, 18e eeuw Gesloopt in 1655 Architectuur Stijlperiode Barok, rococo Detailkaart Portaal    Christendom De Bernardinus van Sienakerk (Pools: Kościół św. Bernardyna w Krakowie) is een van oorsprong 15e-eeuwse kerk in Krakau. Het bouwwerk is een beschermd architec...

يفتقر محتوى هذه المقالة إلى الاستشهاد بمصادر. فضلاً، ساهم في تطوير هذه المقالة من خلال إضافة مصادر موثوق بها. أي معلومات غير موثقة يمكن التشكيك بها وإزالتها. (ديسمبر 2018)   لمعانٍ أخرى، طالع الحكومة السورية (توضيح). حكومة صبري العسلي الأولىمعلومات عامةالبلد سوريا الاختصا

 

Indian actor Dada KondkeBornKrishna Kondke(1932-08-08)8 August 1932Bombay, Bombay Presidency, British IndiaDied14 March 1998(1998-03-14) (aged 65)Mumbai, Maharashtra, IndiaOther namesDadaOccupation(s)Actor, director, lyricist, writer, singerYears active1969–1997Spouse Nalini Kondke ​(m. 1960⁠–⁠1967)​ Krishna Dada Kondke (Marathi pronunciation: [d̪aːd̪a koːɳɖke]; 8 August 1932 – 14 March 1998) was an Indian actor and...

 

Launde PrioryThe remains of Laude Priory were incorporated into the chapel of the newly constructed manor house known as Launde AbbeyLocation within LeicestershireMonastery informationOrderAugustinian Canons RegularEstablishedc.1119Disestablished1538Dedicated toSt John the BaptistDioceseLincolnPeopleFounder(s)Richard and Maud BassetSiteCoordinates52°37′51″N 0°49′25″W / 52.630971°N 0.82371°W / 52.630971; -0.82371Visible remainsIncorporated into the chapel of...

ICC Cricket World Cup Cricket World Cup Trophy Cricket World Cup is an international cricket competition established in 1975.[1] It is contested by the men's national teams of the members of the International Cricket Council (ICC), the sport's global governing body.[2] The tournament generally takes place every four years. Most recently, the 2023 Cricket World Cup, hosted by India, was won by Australia, who beat India. The current trophy was instituted in 1999. It always remai...

 

SoloposMeningkatkan Dinamika MasyarakatTipeSurat kabar harianPemilikBisnis Indonesia GroupPenerbitPT Aksara SoloposBahasaIndonesiaSurat kabar saudariBisnis IndonesiaHarian JogjaSitus webwww.solopos.com Solopos adalah surat kabar harian pagi yang terbit di Kota Surakarta, Jawa Tengah. Harian ini terbit pertama kali pada September 1997. Penerbitnya adalah PT Aksara Solopos yang juga menguasai saham Percetakan PT Solo Grafika Utama, Radio Solopos FM, dan tabloid olahraga Arena. Sejak bulan Mei/J...

 

Elang ekor-merah Buteo jamaicensis Rekaman Status konservasiRisiko rendahIUCN22695933 TaksonomiKerajaanAnimaliaFilumChordataKelasAvesOrdoAccipitriformesFamiliAccipitridaeGenusButeoSpesiesButeo jamaicensis (Gmelin, 1788) Tata namaSinonim taksonButeo borealis Buteo broealis (lapsus) Falco borealis Gmelin Falco harlani AudubonProtonimFalco jamaicensis Distribusi lbs Elang ekor-merah (Buteo jamaicensis) adalah burung pemangsa yang berkembang biak di sebagian besar Amerika Utara, dari pedalaman Al...

American journalist Emma Augusta SharkeyA Woman of the CenturyBornEmma Augusta Browne(1858-09-15)September 15, 1858Rochester, New YorkDiedMay 6, 1902(1902-05-06) (aged 43)Pen nameMrs. E. Burke CollinsSpouse Emmett Burke Collins James F. Skelton Robert R. Sharkey Signature Emma Augusta Sharkey (née, Browne; after first marriage, Collins; after second marriage, Skelton; after third marriage, Sharkey; September 15, 1858 – May 6, 1902) was a 19th-century American writer, journalist, dime ...

 

Pour les articles homonymes, voir Production par lots. Ne doit pas être confondu avec .bat ou Cmd. Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus. Cet article présente des problèmes à corriger. Vous pouvez aider à l'améliorer ou bien discuter des problèmes sur sa page de discussion. Il ne cite pas suffisamment ses sources. Vous pouvez indiquer les passages à sourcer avec {{référence nécessaire}} ou {{Référence souhaitée}}, et inclure les référe...

 

Indo-Aryan language/dialect primarily spoken in Haryana, India This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Haryanvi language – news · newspapers · books · scholar · JSTOR (August 2019) (Learn how and when to remove this template message) Haryanviहरियाणवी ہریاݨویRegionHaryana and De...

Pemberontakan JejuLokasi Pulau Jeju pada peta Korea Selatan.LokasiPulau Jeju, Korea SelatanTanggal3 April 1948SasaranSimpatisan komunisJenis seranganPembantaianKorban tewas14.000[1] hingga 60.000, atau seperlima dari total penduduk.[2]PelakuPasukan antikomunis Syngman Rhee Pemberontakan Jeju (bahasa Korea: 제주 4·3 민중항쟁, Hanja: 濟州 4·3 民衆抗爭) adalah peristiwa pemberontakan yang dimulai pada 3 April 1948 oleh penduduk Pulau Jeju, Korea Selatan yang berada ...

 

Airport in Qamishli, Syria Qamishli Airportمطار القامشلي الدوليIATA: KACICAO: OSKLSummaryAirport typePublicOwnerGovernment of SyriaOperatorDirectorate General of Civil AviationServesQamishli, SyriaTime zoneAST (UTC+03:00)Elevation AMSL1,480 ft / 451 mCoordinates37°01′14″N 041°11′29″E / 37.02056°N 41.19139°E / 37.02056; 41.19139MapKACLocation of airport in SyriaRunways Direction Length Surface m ft 03/21 3,615 11,860 Asphalt ...

 

Batu BerianDesaNegara IndonesiaProvinsiKepulauan RiauKabupatenNatunaKecamatanSerasanKode Kemendagri21.03.06.2005 Luas... km²Jumlah penduduk... jiwaKepadatan... jiwa/km² Pemandangan sekitar Serasan dan Batu Berian Batu Berian merupakan salah satu desa yang ada di kecamatan Serasan, Kabupaten Natuna, provinsi Kepulauan Riau, Indonesia. Pranala luar (Indonesia) Keputusan Menteri Dalam Negeri Nomor 050-145 Tahun 2022 tentang Pemberian dan Pemutakhiran Kode, Data Wilayah Administrasi Pemeri...

Berlin U-Bahn station MohrenstraßePlatformGeneral informationLocationMohrenstraße/WilhelmstraßeMitte, BerlinGermanyCoordinates52°30′42″N 13°23′05″E / 52.51167°N 13.38472°E / 52.51167; 13.38472Owned byBerliner VerkehrsbetriebeOperated byBerliner VerkehrsbetriebePlatforms1 island platformTracks2Connections : 300 : M48 ConstructionStructure typeUndergroundBicycle facilitiesYes (Call a Bike, bicycle parking)AccessibleYesOther informationFare zone: Berlin A/5...

 

潘宗孝2023年12月30日,潘宗孝在香港會議展覽中心出席《新城勁爆頒獎禮2023》男艺人罗马拼音Poon Chung Hau英文名Ernest昵称ERN9、Ern7国籍 中华人民共和国(香港)出生 (1992-08-25) 1992年8月25日(31歲) 英屬香港职业演員、YouTuber语言粵語、英語、普通話、日語教育程度香港浸會大學母校聖士提反書院 [1]出道地点 香港代表作品填詞L活跃年代2016年至今相关团体N9(2023年...

 

Strategi Solo vs Squad di Free Fire: Cara Menang Mudah!