Jak založit projekt s testy
Místo AAA
používejte jméno projektu, který chcete vytvořit.
Z příkazové řádky (terminál ve VS Code)
- Vytvořit solution (seskupení více projektů – implementace a testy):
dotnet new sln
- Vytvořit projekt s implementací:
dotnet new classlib -o AAA
(-o
nastaví output folder,classlib
= knihovna, nebudu ten kód spouštět přímo) - Přidat projekt s implementací do solution:
dotnet sln add AAA/AAA.csproj
- Vytvořit projekt s testy (my používáme xUnit):
dotnet new xunit -o AAA.Tests
- Přidat projekt s testy do solution:
dotnet sln add AAA.Tests/AAA.Tests.csproj
- Propojit implementaci s testy (přidat ji jako referenci):
dotnet add AAA.Tests/AAA.Tests.csproj reference AAA/AAA.csproj
- Přidat
using AAA;
do testů - Spustit testy:
dotnet test
Visual Studio
- Vytvořte nový projekt s implementací (v našem případě vyberte template Class Library), tentokrát nezaškrtávejte Place solution and project in the same directory. Solution se vytvoří automaticky.
- Projekt s testy jde přidat třeba kliknutím pravým tlačítkem na Solution (v okně Solution Explorer) a následně Add Project. Pak vyberte template testového projektu (v našem případě xUnit Test Project). Doporučuji ho pojmenovat
AAA.Tests
. - Propojte implementaci s testy. V Solution Explorer klikněte pravým tlačítkem na Dependencies u projektu s testy. Pak zvolte možnost Add Project Reference a vyberte projekt s implementací.
- Přidejte
using AAA;
do testů.
Dostupnost internal
položek
Občas se hodí mít z testů přístup k metodám a datovým položkám, které ale nechcete mít úplně veřejné (public
), aby nebyly dostupné koncovým uživatelům. Na to se dá použít modifikátor přístupu internal
, který znamená, že položky jsou viditelné pouze z daného projektu. Tyto položky se dají zpřístupnit také pro jiné projekty, pokud známe jejich jméno (což v případě testů známe).
Stačí přidat
using System.Runtime.CompilerServices;
[assembly:InternalsVisibleTo("AAA.Tests")]
namespace AAA;
namespace ...
už tam byl). "AAA.Tests"
je jméno projektu s testy.
Úlohy na procvičení
Systém pro správu knih v knihovně
Navrhněte a implementujte jednoduchý systém správy knihovny. Systém by měl spravovat výpůjčky a vrácení knih. Systém bude sledovat, které knihy jsou dostupné a které jsou aktuálně vypůjčené. Zahrňte funkce pro vypůjčení knihy držiteli knihovního průkazu a zpracování vrácení knih. Předpokládejte, že každá kniha a držitel průkazu má jedinečný identifikátor. Systém by měl umožňovat přidání nových knih do knihovny a registraci nových držitelů průkazů.
Nejprve navrhněte dekompozici problému do tříd.
Poté systém implementujeme pomocí přístupu test-driven development.
Dokončení implementace
Pomocí TDD dokončete implementaci.
- vrácení knih
- doplnění informací do
Book
(název, autor, …),LibraryCard
, … - seznam vypůjčených knih pro průkaz
- …
Snažte se otestovat všechny možné situace, které můžou nastat.
- půjčení neexistující knihy
- přidání knihy/uživatele se stejným ID
- …
Příšera v bludišti
Navrhněte objektovou dekompozici úlohy.
Taky se zamyslete nad možnými rozšířeními nebo změnami zadání. Jak komplikované je přidat novou funkčnost? Je potřeba měnit návrh?
Zadání
V bludišti reprezentovaném maticí políček se nachází příšera. Příšera je v každém kroku na jednom políčku a je otočená jedním ze čtyř možných směrů - nahoru, doprava, dolů nebo doleva.
V každém kroku výpočtu příšera udělá jeden tah, možné tahy jsou
- otočit se doprava,
- otočit se doleva,
- postoupit kupředu, tj. přejít na sousední políčko ve směru otočení.
Na začátku má příšera po pravé ruce zeď a pohybuje se tak, aby pravou rukou stále sledovala tuto zeď (viz příklad).
Vstup programu obsahuje nejdříve šířku a výšku a potom mapu bludiště. Jednotlivé znaky představují jednotlivá políčka mapy:
X
znamená zeď,.
znamená volné políčko,- znaky
^
,>
,v
nebo<
znamenají volné políčko, na kterém právě teď stojí příšera, otočená směrem nahoru, doprava, dolů nebo doleva, v tomto pořadí.
Program načte popis bludiště a potom dvacetkrát pohne příšerou a po každém pohybu vytiskne mapu bludiště ve stejném tvaru, jako ji načetl. Výpis mapy bude vždy ukončen prázdným řádkem.
Příklad
Vstup:
10
6
XXXXXXXXXX
X....X...X
X....X...X
X.X..X.X.X
X.X.>..X.X
XXXXXXXXXX
Výstup (zkráceno):
XXXXXXXXXX
X....X...X
X....X...X
X.X..X.X.X
X.X..>.X.X
XXXXXXXXXX
XXXXXXXXXX
X....X...X
X....X...X
X.X..X.X.X
X.X...>X.X
XXXXXXXXXX
XXXXXXXXXX
X....X...X
X....X...X
X.X..X.X.X
X.X...^X.X
XXXXXXXXXX
Učební výstupy
Učební výstupy podávají zhuštěný souhrn základních konceptů a dovedností, které byste měli umět vysvětlit a/nebo použít po každém cvičení.