dbwebb-se / mvc

Course repo for the mvc and object orientation in frameworks course - mvc.
Other
1 stars 4 forks source link

Hur kan jag testköra mina egna klasser i Main.php utan att behöva exekvera koden i Symfony? #50

Open mosbth opened 2 years ago

mosbth commented 2 years ago

Någon frågade i chatten hur man kan provköra sin egen kod via ett eget main-program eller ett mindre testprogram, utan att behöva inkludera hela Symfony och köra i webbläsaren.

Det är en riktigt bra idé och det kan förenkla din utveckling och felsökning. Här finns alltså tid att spara.

Här är ett mindre program som inkluderar en autoloader, instansierar en klass och kör lite tester.

<?php

namespace App\Dice;

use App\Dice\Dice;

require_once 'vendor/autoload.php';

$die = new Dice();

echo "hi\n";

echo $die->roll() . "\n";

echo "ho\n";

Jag väljer att köra programmet från rooten i projektkatalogen och därmed fungerar sökvägen som inkluderar autoloadern.

desktop:~/git/dbwebbse/kurser/mvc/me/report
$ php src/Dice/Main.php
hi
5
ho

Här är en översikt av källkodsfilerna.

2022-04-13_15:47:14_1405x649

mosbth commented 2 years ago

Ett litet bekymmer med att placera dessa main-program direkt under src/ är när man påbörjar enhetstester. Normalt sett exekverar testprogrammet phpunit all kod som ligger i src/ mappen och har man då program som ger utskrifter så syns den utskriften när man kör phpunit. Detta beteende av phpunit kan man konfigurera bort.

En bättre variant är att placera sina main-program som är till för att testa koden på en annan plats. När vi börjar med tester så kommer vi lägga till katalogen tests/ och där skulle man tex kunna placera dessa main-program i en underkatalog likt tests/main. På det viset slipper dessa main-program krocka med den riktiga källkoden och phpunit fungerar utan att man behöver uppdatera dess konfiguration.

Utför följande kommandon för att jobba i den nya strukturen, förutsatt att vi utgår från exemplet ovan.

# Stå i rooten av projektet
mkdir tests/main
mv src/Dice/Main.php tests/main/DiceMain.php
php tests/main/DiceMain.php