Podcast
Questions and Answers
Jaký je hlavní účel souborů v kontextu operačních systémů a programování?
Jaký je hlavní účel souborů v kontextu operačních systémů a programování?
Zajištění persistentního uložení dat a umožnění přenosu a sdílení dat mezi různými programy nebo systémy.
Jaký je rozdíl mezi soubory CSV a XML z hlediska obsahu metadat?
Jaký je rozdíl mezi soubory CSV a XML z hlediska obsahu metadat?
CSV soubory mají omezenou podporu metadat (pouze volitelná hlavička), zatímco XML soubory umožňují detailní popis struktury a metadat pomocí značek.
Vysvětlete, jak datový tok (stream) umožňuje manipulaci s daty a jaké jsou výhody tohoto přístupu?
Vysvětlete, jak datový tok (stream) umožňuje manipulaci s daty a jaké jsou výhody tohoto přístupu?
Datový tok umožňuje sekvenční přístup k datům po jednotlivých bytech, což umožňuje pracovat s nimi bez nutnosti načtení celého souboru. Výhodou je efektivita při zpracování velkých objemů dat.
Jaký je rozdíl mezi datovými typy char
a string
v C# a jak se liší jejich reprezentace v paměti?
Jaký je rozdíl mezi datovými typy char
a string
v C# a jak se liší jejich reprezentace v paměti?
Popište, jak funguje interpolace řetězců v C# a jaký znak se používá pro její aktivaci?
Popište, jak funguje interpolace řetězců v C# a jaký znak se používá pro její aktivaci?
Proč je doporučeno používat třídu StringBuilder
pro postupné slučování více textových řetězců namísto operátoru +
?
Proč je doporučeno používat třídu StringBuilder
pro postupné slučování více textových řetězců namísto operátoru +
?
Vysvětlete, k čemu slouží regulární výrazy a uveďte alespoň tři jejich typické využití.
Vysvětlete, k čemu slouží regulární výrazy a uveďte alespoň tři jejich typické využití.
Jaký je rozdíl mezi metodami Regex.Match
a Regex.Matches
?
Jaký je rozdíl mezi metodami Regex.Match
a Regex.Matches
?
Vysvětlete, co je to 'pojmenované seskupení' v regulárních výrazech a jak se používá?
Vysvětlete, co je to 'pojmenované seskupení' v regulárních výrazech a jak se používá?
Co je to ORM (Object-Relational Mapping) a jaký je jeho hlavní účel?
Co je to ORM (Object-Relational Mapping) a jaký je jeho hlavní účel?
Jak se mapují tabulky, sloupce a řádky v databázi na objekty v Entity Framework?
Jak se mapují tabulky, sloupce a řádky v databázi na objekty v Entity Framework?
Vysvětlete rozdíl mezi 'eager loading' a 'lazy loading' v Entity Framework a uveďte, kdy je vhodné použít který přístup.
Vysvětlete rozdíl mezi 'eager loading' a 'lazy loading' v Entity Framework a uveďte, kdy je vhodné použít který přístup.
Co je to 'connection string' a jaké informace obvykle obsahuje?
Co je to 'connection string' a jaké informace obvykle obsahuje?
Jaký je základní princip fungování Windows Forms a na jakých konceptech je tento framework založen?
Jaký je základní princip fungování Windows Forms a na jakých konceptech je tento framework založen?
Jaký rozdíl je mezi metodami Show()
a ShowDialog()
při práci s okny ve Windows Forms?
Jaký rozdíl je mezi metodami Show()
a ShowDialog()
při práci s okny ve Windows Forms?
Vysvětlete, jak funguje validace dat ve Windows Forms a jakou roli hraje komponenta ErrorProvider
?
Vysvětlete, jak funguje validace dat ve Windows Forms a jakou roli hraje komponenta ErrorProvider
?
K čemu slouží grafický objekt Graphics v GDI a jak se získá grafický objekt z komponenty PictureBox?
K čemu slouží grafický objekt Graphics v GDI a jak se získá grafický objekt z komponenty PictureBox?
Vysvětlete, jak funguje transformace souřadného systému v GDI a jaké metody se používají pro posunutí, rotaci a změnu škálování?
Vysvětlete, jak funguje transformace souřadného systému v GDI a jaké metody se používají pro posunutí, rotaci a změnu škálování?
Definujte pojem 'složitost algoritmu' a vysvětlete, jak souvisí s efektivitou algoritmu.
Definujte pojem 'složitost algoritmu' a vysvětlete, jak souvisí s efektivitou algoritmu.
Vysvětlete, co je to 'asymptotická časová složitost' a proč se používá místo přesného výpočtu časové složitosti?
Vysvětlete, co je to 'asymptotická časová složitost' a proč se používá místo přesného výpočtu časové složitosti?
Flashcards
Soubor
Soubor
Pojmenovaná sada dat uložená na datovém médiu. Význam bytů je definován datovým formátem. Přístup je zprostředkován operačním systémem.
Souborový systém
Souborový systém
Hierarchická datová struktura OS pro uchování souborů. Soubory jsou identifikovány jménem a cestou.
CSV soubory
CSV soubory
Textový formát pro tabulková data, kde řádek odpovídá záznamu a hodnoty jsou odděleny separátorem.
XML soubory
XML soubory
Signup and view all the flashcards
JSON soubory
JSON soubory
Signup and view all the flashcards
Datový tok
Datový tok
Signup and view all the flashcards
Textový řetězec (string)
Textový řetězec (string)
Signup and view all the flashcards
Regulární výraz (regex)
Regulární výraz (regex)
Signup and view all the flashcards
Objektově relační mapování (ORM)
Objektově relační mapování (ORM)
Signup and view all the flashcards
Entity Framework (EF)
Entity Framework (EF)
Signup and view all the flashcards
Mapování objektů (EF)
Mapování objektů (EF)
Signup and view all the flashcards
Windows Forms
Windows Forms
Signup and view all the flashcards
this.DialogResult
this.DialogResult
Signup and view all the flashcards
Algoritmus
Algoritmus
Signup and view all the flashcards
Složitost algoritmu
Složitost algoritmu
Signup and view all the flashcards
Asymptotická časová složitost
Asymptotická časová složitost
Signup and view all the flashcards
Třída O(1)
Třída O(1)
Signup and view all the flashcards
Testování
Testování
Signup and view all the flashcards
Jednotkové (unit) testy
Jednotkové (unit) testy
Signup and view all the flashcards
Dummy (testování)
Dummy (testování)
Signup and view all the flashcards
Study Notes
Soubory a souborový systém
- Soubor je pojmenovaná sada dat (pole bytů) uložená na datovém médiu.
- Význam jednotlivých bytů v souboru určuje jeho datový formát.
- Programy přistupují k souborům přes operační systém (I/O systémová volání).
- Cílem souborů je zajistit trvalé uložení dat a umožnit jejich přenos a sdílení mezi programy a systémy.
- Souborový systém je hierarchická datová struktura, která slouží k ukládání souborů.
- Soubory jsou v souborovém systému identifikovány pomocí jména a cesty.
Formáty souborů
- CSV (hodnoty oddělené čárkami):
- Jednoduchý textový formát pro tabulková data.
- Jeden řádek odpovídá záznamu, hodnoty jsou odděleny separátorem.
- Výhoda: jednoduchý a malá velikost.
- Nevýhoda: pouze tabulková data, chybí metadata (vyjma hlavičky).
- XML (rozšiřitelný značkovací jazyk):
- Textový formát pro strukturovaná (hierarchická) data.
- Obsahuje strukturu pomocí XML značek (tagů), které vymezují elementy.
- Výhoda: obsahuje metadata, lze interpretovat význam dat.
- Nevýhoda: velká velikost, pro zpracování je nutné jej přečíst celý.
- JSON (objektový zápis založený na jazyce JavaScript):
- Textový formát pro strukturovaná (hierarchická) data.
- Obsahuje objekty (klíč-hodnota) a pole (číslovaný seznam hodnot).
- Výhoda: jednodušší než XML, dobře čitelný pro uživatele.
- Nevýhoda: pro zpracování je nutné jej přečíst celý.
Datový tok
- Datový tok umožňuje sekvenční přístup ke zdroji dat, jako je soubor nebo síť.
- Umožňuje manipulaci s daty po jednotlivých bytech bez nutnosti načtení celého souboru.
- Otevřením toku se blokuje přístup ke zdroji dat, proto je nutné tok uzavřít (Close, using).
- StreamReader a StreamWriter umožňují čtení a zápis po řádcích textu (místo jednotlivých bytů).
- Důležité třídy: File, FileStream, StreamReader, StreamWriter, FileInfo, DirectoryInfo, Path.
Práce s řetězci v C#
- Znak (char) je reprezentován datovým typem char (2 byte), v paměti jako celé číslo.
- Pro zápis jednoho znaku se používají jednoduché uvozovky (např. 'A').
- Textový řetězec (string) je reprezentován datovým typem string (2 byte * počet znaků).
- Je pole znaků, k jednotlivým znakům lze přistupovat přes index (text[0]).
- Pro zápis textového řetězce se používají dvojité uvozovky (např. "ahoj").
- Pomocí znaku $ před řetězcem lze vložit hodnoty (interpolace).
- Operátor + slouží ke zřetězení řetězců, což vytvoří nové pole.
- Pro postupné slučování řetězců je vhodná třída StringBuilder.
Důležité metody pro práci s řetězci
- text.Length: vrátí počet znaků.
- text.Split(';'): rozdělí text na pole částí podle oddělovače.
- text.Contains("ahoj"): vrátí true/false, zda text obsahuje daný string.
- text.IndexOf("AB"): vrátí index prvního výskytu řetězce.
- text.Substring(2, 5): vrátí podřetězec začínající na indexu 2 o délce 5.
- text.Insert(2, "něco"): vloží podřetězec na index 2.
- text.Replace("hi", "ahoj"): nahradí jeden podřetězec za jiný.
- text.ToLower(): převede text na malá písmena.
- text.ToUpper(): převede text na velká písmena.
- Důležitá třída: StringBuilder
Regulární výrazy
- Textový vzor pro vyhledávání a manipulaci s textem.
- Alternativa k metodám pro práci s řetězci.
- Skládá se z běžných a speciálních symbolů.
- Účel: validace, vyhledávání, nahrazování a extrakce informací z textu.
Speciální symboly regulárních výrazů
^
: Počátek řetězce.$
: Konec řetězce.|
: Alternativa (nebo).(výraz)
: Seskupení podvýrazu.(?<skpl>výraz)
: Pojmenované seskupení..
: Zástupný symbol pro libovolný znak.{min,max}
: Počet opakování předchozího symbolu.{cnt}
: Přesný počet opakování.*
: 0 až neomezeně opakování.+
: 1 až neomezeně opakování.?
: 0 až 1 opakování.[abc]
: Výčet znaků.[^abc]
: Znak, který není ve výčtu.[a-z]
: Rozsah znaků.\
: Escape znak (změní speciální symbol na běžný).
Metody a vlastnosti regulárních výrazů
regex.IsMatch(vstup)
: vrací true/false, zda vstup odpovídá výrazu.regex.Matches(vstup)
: vrátí kolekci všech shod.regex.Replace(vstup, repl)
: nahradí shody za repl.match.Index
: vrátí index prvního znaku shody.match.Value
: vrátí podřetězec odpovídající shodě.match.Groups["skp1"]
: vrátí část shody zachycenou v pojmenované skupině.- Důležitá třída: Regex
Entity Framework
- ORM umožňuje převádět data z relační databáze do objektů v programovacím jazyce.
- Pracuje se s objektovou reprezentací (LINQ) namísto psaní SQL.
- EF je framework pro ORM v .NET.
- Lze pracovat s různými databázemi pomocí konektorů.
- Pro připojení stačí vybrat konektor a uvést connection string.
Mapování objektů v Entity Framework
- Tabulky se mapují na entitní třídy ([Table("tabulka")]).
- Sloupce se mapují na vlastnosti ([Column("sloupec")]).
- Řádky odpovídají instancím entitních tříd (entitám).
- Každá entita musí být identifikována pomocí primárního klíče ([Key]).
- Každá entitní třída musí mít defaultní konstruktor.
Mapování vztahů a načítání dat v Entity Framework
- Vztahy se mapují na asociace mezi objekty.
- Kardinalita a parcialita vztahu se mapuje na multiplicity objektů.
- Cizí klíč musí mít speciální vlastnost ([Column]).
- Asociace se realizují pomocí vlastností odkazujících na druhou třídu (navigační vlastnosti, [ForeignKey("vlastnost")]).
- Eager loading načte odkazy předem pomocí Include().
- Lazy loading načte odkazy pomocí proxies až při přístupu k nim.
- Pro Lazy loading je potřeba modifikátor virtual u vlastností.
Postup práce s Entity Framework
- Nainstalovat balíčky EF, proxies, konektor.
- Vytvořit entitní třídy s anotacemi.
- Vytvořit DatabaseContext, zdědit DbContext, přidat DbSet<Enita> pro každou tabulku.
- Překrýt metodu OnConfiguring, použít konektor a uvést connection string.
- Vytvořit instanci DatabaseContext.
- Přistoupit k DbSetu a pracovat s ním jako s kolekcí.
- Uložit změny pomocí context.SaveChanges().
- Důležité anotace: Table, Column, Key, ForeignKey, InverseProperty.
- Důležité třídy: DbContext, DbSet
Windows Forms
- Framework pro desktopové GUI aplikace v .NET.
- Založen na komponentovém přístupu (řízeném událostmi).
- GUI je tvořeno komponentami (okna Forms, ovládací prvky Controles).
- Aplikace reaguje na vstupy uživatele pomocí obslužných metod (event handlers).
- Struktura: Formulář (kontejner), Ovládací prvky, Události (reakce na akce), Vlastnosti, Metody.
Ovládací prvky ve Windows Forms
- Label: textový popisek.
- Button: tlačítko.
- TextBox: textové pole.
- NumericUpDown: pole pro zadání čísla.
- CheckBox: zaškrtávací pole.
- ListBox: seznam položek.
- ComboBox: rozbalovací seznam položek.
- DataGridView: komponenta pro zobrazení tabulkových dat.
Práce a vlastnosti komponent ve Windows Forms
- Přes vlastnost DataSource lze nastavit zdroj dat pro komponenty jako ListBox, ComboBox a DataGridView.
- Událost TextChanged nastane, když dojde k úpravám textu.
- Lze omezit vstup pouze na čísla pomocí NumericUpDown a určit počet desetinných míst. Změna hodnoty se projeví v události ValueChanged.
- Pro zaškrtávací pole určujeme, zda je pole zaškrtnuto (true/false) ve vlastnosti Checked, změna se projeví v CheckedChanged.
Práce se seznamem v ListBox a ComboBox
- Vlastnost Items umožňuje manuální práci s položkami.
- Přes SelectedItem získáme vybranou položku, přes SelectedIndex index vybrané položky.
- DataGridView lze napojit na externí zdroj dat přes DataSource.
- DisplayMember specifikuje název vlastnosti, která se bude zobrazovat, ValueMember specifikuje název vlastnosti, kterou bude vracet SelectedValue.
Práce s více okny ve Windows Forms
- Form1 form = new Form1(): vytvoří novou instanci okna.
- form.Show(): otevře okno nezávisle, neblokuje provádění kódu.
- form.ShowDialog(): otevře okno jako dialog/modální okno, blokuje provádění kódu.
- this.Close(): zavře aktuální okno.
- this.Visible: vlastnost pro skrytí/zobrazení okna.
Práce s výsledkem okna ve Windows Forms
- this.DialogResult: vlastnost pro nastavení výsledku operace.
- form.ShowDialog(): otevře okno a čeká na provedení operace, vrátí DialogResult.
Předpřipravená dialogová okna (MessageBox)
- Ve Windows Forms je možné využít předpřipravená dialogová okna.
- MessageBox.Show("Zpráva...") zobrazí základní dialogové okno se zprávou.
- MessageBox.Show("Otázka?","Titulek",MessageBoxButtons.YesNo,MessageBoxIcon.Question) zobrazí okno s otázkou a tlačítky Ano/Ne.
Validace dat ve Windows Forms
- Data od uživatele by měla být validována před dalším zpracováním.
- Lze použít podmínky a metody pro práci s textem, regulární výrazy.
- Lepší zpětnou vazbu poskytne upozornění na nevalidní data při jejich zadání.
- Lze využít speciální vlastnosti komponent (MaxLength, Minimum apod.).
- Další možností je využití události Validating a komponenty ErrorProvider.
POSTUP VALIDACE (ErrorProvicer)
- Vytvoříme validační třídu (volitelně, doporučeně).
- Přidáme do aktuálního okna komponentu ErrorProvider.
- Ke každému vstupnímu ovládacímu prvku přidáme obslužnou metodu pro událost Validating.
- Metodou errorProvider.SetError (komponenta, "chybová hláška") a e.Cancel = true kontrolujeme, zda je validace nevalidní a nastavujeme chybové hlášky.
- Metodou errorProvider.SetError (komponenta, null) a e.Cancel = false pokud je validace validní.
- Důležité je zajistit validaci všech údajů na začátku kódu pro zpracování dat.
- DataGridView: komponenta pro zobrazení tabulkových dat.DataSource (možno napojit na pole, List neaktualizuje se; BindingList - aktualizuje se).Je možné vytvořit si vlastní třídu jako datový zdroj, stačí realizovat rozhraní
GDI (Graphics Device Interface)
- Knihovna pro vykreslování 2D grafiky v .NET aplikacích.
- Lze ji využít pro kreslení tvarů, obrázků a textu v aplikacích Windows Forms.
- Pracuje na principu grafického objektu (Graphics).
Souřadný systém v GDI
- Každý prvek má souřadnice.
- Souřadný systém je kartézský, počátek (0,0) je v levém horním roku.
- Osa Y roste shora dolů.
- Výchozí jednotka je pixel.
Grafická plocha v GDI
- Vykreslování probíhá nejčastěji na komponentě PictureBox.
- Je nutné získat grafický objekt Graphics:
- V případě PictureBox lze využít jeho událost Paint, ve které lze získat grafický objekt z parametru jako e.Graphics. Graphics.FromBitmap(bmp).
Pero a štětec v GDI
- Pen (pero) pro kreslení čar a obrysů (barva, tloušťka).
- Brush (štětec) pro vyplnění oblastí barvou.
- GDI obsahuje sadu předdefinovaných per (Pens) a štětců (Brushes). Vstupní soubory, textové soubory, obrázky ve formátu bitmapu.
Vykreslování textu a obrázků v GDI
- Vytvořit font (Font) pro vykreslování textu s parametry jako typ písma a jeho velikost.
- StringFormat nastaví parametry pro rozvržení a zarovnání textu.
- G.DrawString("nějaký text", font, Brushes.Black, 10, 10) vykreslí text v daném fontu a zadané pozici (levý horní roh obklopujícího textu).
Transformace souřadnicového systému v GDI
- knihovna GDI umožňuje posouvat (TranslateTransform(x, y)), otáčet (RotateTransform(angle)), měnit měřítko (ScaleTransform(scaleX, scaleY)) nebo resetovat (ResetTransform).Opakované překreslování
Algoritmus
- Přesný postup pro řešení úloh.
- Musí řešit všechna platná zadání problému (obecný), vracet výsledek (výstup), být jednoznačný, elementární a konečný.
Algoritmy
- Způsoby vyjádření: slovně (pochopitelné, ale nejednoznačné), vývojový diagram (přehledné pro jednoduché, nepřehledné pro složité), pseudokód (přesný, ale nelze přeložit do strojového kódu), programovací jazyk (lze spustit, ale čitelné jen pro odborníky).
Složitost algoritmu
- Vyjadřuje efektivitu algoritmu.Závisí množství potřebných zdrojů (CPU, RAM) na velikosti vstupních dat.
- Časová složitost vyjadřuje, jak závisí počet operací na velikosti vstupu (n).Lze vyjádřit jako matematickou funkci T(n).Přesný výpočet je náročný.
- Asymptotická časová složitost je odhad skutečné časové složitosti pro velké vstupy.Zanedbává pomaleji rostoucí členy a konstanty.
- Třídy asymptotické časové složitosti (konstantní, logaritmická, lineární, linearitmická, kvadratická, exponenciální).
Třídy asymptotické časové složitosti algoritmu
- Třída O(1) - konstantní složitost: kód neobsahuje cykly závislé na velikosti vstupu (např. prohození dvou prvků v poli).
- Třída O(log n) - logaritmická složitost: kód obsahuje cyklus, který dělí velikost vstupu (např. binární vyhledávání v seřazeném poli).
- Třída O(n) - lineární složitost: kód obsahuje cyklus, který projde celý vstup (např. vyhledání prvku v neseřazeném poli).
- Třída O(n* log n) - linearitmická složitost: kód obsahuje dva vnořené cykly (např. řazení prvků optimálními algoritmy jako QuickSort).
- Třída O(n^2) - kvadratická složitost: kód obsahuje dva vnořené cykly(BubbleSort, SelectionSort, InsertionSort).
- Třída O(2^n) - exponenciální složitost: kód obsahuje rekurzivní funkci (větvení s aritou 2/optimalizovaný problém batohu.
Testování softwaru
- Fáze životního cyklu vývoje softwaru (po analýze, návrhu, implementaci):
Ověření, že software splňuje požadavky.Cílem je zajistit kvalitu a odhalit nedostatky:
- Funkcionalita. Všechny funkcionality, které vždy vracejí správné výsledky
- Spolehlivost - Stabilita softwaru, tady že software při práci nespadne, případně že je schopen se z pádu obnovit apod.
- Bezpečnost.Software neobsahuje zranitelnosti, které by mohly vést k únikům dat či neoprávněnému přístupu
- Výkonnost. Efektivita systému je rychlost, propustnost, využití paměti jeho zatížení
- Použitelnost.Software je snadný a intuitivní na ovládání, a že jsou v něm uživatelé schopní samostaně vykonat potřebné úkony.
- Automatizované a manuální testy.
- White-box a black-box testing (podrobnější definice v popisu).
Typy testů
- Unit testy: správná funkčnost tříd a metod v izolovaném prostředí(většinou automatizované, white-box)
- Integrační testy: vzájemná interakce tříd a komponent(většinou automatizované, white-box i black-box)
- Systémové testy: testují softwarový produkt jako celek(z pohledu uživatele)
Testovatelnost kódu
- Software z uživatelského hlediska(na úrovni systémových testů) je možné vždy.
Testovatelnost softwaru v kódu(unit testy, integrační testy) však není samozřejmostí:
- špatně napsaný kód zkomplikuje či znemožní jeho testování(zvláště pak automatizované)
Co dodržet, aby byl kód testovatelný/čemu se vyhnout aby byl kód testovatelný
- S: kratší třídy a metody s jedním účelem(lze je snadněji testovat)
- 0: kód, který je rozšiřitelný bez změny stávajícího(není pak třeba přepisovat stávající testy)
- C: zapouzdření(snižuje se počet věcí, které je nutné testovat)
- L: potomek by měl vždy být zaměnitelný za rodiče(u potomka není třeba znovu testovat funkcionalitu rodiče)
- I: specializovaná rozhraní(lze pak snáze testovat relevantní metody objektů)
- D: rozhraní, namísto konkrétních třída ( lze snáze nahradit "falešnými" a simulovat okolní prostředí)
- konstruktor jedné třídy vytvoří instanci jiné třídy, konstruktor provádí, jakoukoliv další činnost mimo nastavování počátečního stavu a metoda třídy používá, jakýkoliv globální stav.
Jednotkové (unit) testy
- Testují správnou funkčnost jednotlivých třídy a jejich metod v izolovaném prostředí
- Výhody: automatizované, rychlé(lze testovat během vývoje), přesně lokalizují chybu. Nevýhody: nezaručují správnou interakci mezi třídami, pro pokrytí celého programu je jich třeba velký počet:
- Průběh unit testů
-
- Příprava (setup).Izolované prostředí(instance okolních tříd se simulují pomocí "falešných" objektů)Vytvoří se instance testované třídy, předají se závislosti -2) Provedení (execution).Metody na instanci testované třídy provádějí se testovací vstupy
-
- Ověření (assert). volané metody vrátily správné výstupy, stav testovaného objektu změnil očekávaným způsobem
- V testování kontrolujeme následující věci
- jestli se okolí testovaného objektu změnilo očekávaným způsobem.Test neprojde nastala-li chyba či neodpovídá ne projde.
- Uklid(teardown)..odstranění či resetování objektů do původního stavu, aby mohl být test spuštěn opakovaně
- (TEST doubles(fake objekty))
TEST DOUBLES(fake objekty)
- DUMMY : zastupující objekt, který má stejné rozhraní jako skutečný objekt, ale nic nedělá.
- STUB : zastupující objekt, který má stejné rozhraní jako skutečný objekt, ale jeho vlastnosti a metody poskytují předem definované hodnoty
- FAKE : objekt, který poskytuje stejnou funkcionalitu jako skutečný objekt, ale má výrazně zjednodušenou implementaci
- SPY objekt : který namísto reálné implementace sleduje, jaké metody(a s jakými argumenty) na něm byly zavolány
- MOCK : objekt, který po předání do testovaného objektu aktivně řídí proces testování(navíc může kombinovat Stub Spy).
Studying That Suits You
Use AI to generate personalized quizzes and flashcards to suit your learning preferences.