Deze solution is bedoelt om te laten zien hoe je unit tests kan schrijven in C#.
Clone de repo en open testing-sample.code-workspace
.
Open de voorbeeld app door in vscode de task Start Full Stack
te runnen.
Home Page
Pizza lijst pagina
Pizza invoer en update
Saus verwijderen
[https://github.com/lohithgn/blazor-aspnetwebapi-efcore-sample]
Houd de volgende naamgeving aan voor de tests:
CalculatePrice_WithBasicPizza_ReturnsMinimumAmount
[MethodName] _ [Scenario] _ [ExpectedBehaviour]
Open de PriceCalculatorService
en kijk naar de business logic die erin zit. Deze zou je met de hand vanuit de UI kunnen testen, maar dat is niet schaalbaar.
Daarom gaan je het automatiseren door unit tests te schrijven.
- In de file
PriceCalculatorServiceTests.cs
staat de setup voor de tests.
In PriceCalculatorService.cs
zet je het stuk voor de seasonal discount aan:
Voeg een nieuwe test toe die kijkt of de seasonal discount werkt. De seasonal discount is 20% korting op de prijs van de pizza in november.
// gebruik de FakeTimeProvider om tijdens de test de datum aan te passen.
FakeTimeProvider fakeTimeProvider = new();
fakeTimeProvider.SetUtcNow(new DateTimeOffset(new DateTime(2024, 11, 15)));
In PizzaService.cs
is een ValidatePizza
methode. Deze valideert e.e.a. over de pizza.
Hoe krijg je deze methode getest? Hoeveel van de dependencies zijn nodig om de methode te testen?
Refactor de codebase en schrijf unit tests de ValidatePizza
methode.
Refactor deze methode naar een nieuwe class PizzaValidator
.
Gebruik FakeItEasy om de dependencies te mocken.
A.CallTo(() => _priceCalculatorService.CalculatePrice(A<PizzaEntity>._)).Returns(10);
Doordat de namespace ook Pizza
heeft is het lastig om de pizza class te gebruiken.
using DM = Contoso.Pizza.Data.Models;
new DM.Pizza { Name = "Test Pizza", Price = 2,Sauce = new() { Name = "Sauce" } };
Mocht je vast lopen er zijn 2 pullrequest met voorbeeld code:
Deze voegt de PizzaValidator
toe en een lege tests:
https://github.com/gjlubbertsen/unit-testing-by-example/pull/2/files
Deze voegt de PizzaValidator
toe en een volledige tests:
https://github.com/gjlubbertsen/unit-testing-by-example/pull/1/files