Approval test for your public API
Vyvíjate .NET knižncicu a chcete mať istotu, že verejné API vašej knižnice je stále konzistentné a verziované správne?
Ako kontrolujete či zmeny nespôsobili zmenu vo verejnom API vašej knižnice?
Ja som na to vyskúšal kombinánciu knižnie
PublicApiGenerator a approval testov (v mojom prípade Verify).
Táto kombinácia mi zaručí, že ak sa zmení verejné API mojej knižnice, tak sa o tom dozviem a som nútený zamyslieť sa:
- či je táto zmena v súlade s víziou knižnice
- či nová
public
vec neznamená, že sa o ňu budem musieť starať (tak či tak budem 😊) - či je zmena správne zdokumentovaná
- či je správne zvolená verzia knižnice (nenastala breaking change?)
- ...
Majme jednoduchú knižnicu, ktorá obsahuje jednu triedu Calculator
s jednou metódou Add
:
public class Calculator
{
public int Add(int a, int b) => a + b;
}
Do testovacieho projektu si pridajme PublicApiGenerator
a Verify
(u mňa je to Verify.XUnit
):
dotnet add package PublicApiGenerator
dotnet add package Verify.Xunit
A napíšme test, ktorý zistí, či sa verejné API knižnice nezmenilo:
public class ApiVersionChangeTest
{
[Fact]
public Task ApproveApiVersion()
{
var publicApi = typeof(Calculator)
.Assembly
.GeneratePublicApi(); // 👈 Generate Public API string
return Verify(publicApi); // 👈 Verify public API
}
}
Keď pridáme novú metódu Subtract
do Calculator
triedy:
public class Calculator
{
public int Add(int a, int b) => a + b;
public int Subtract(int a, int b) => a - b;
}
Test zlyhá a my uvidíme, že sa zmenilo verejné API:
········public·Calculator()·{·}
········public·int·Add(int·a,·int·b)
+········public·int·Subtract(int·a,·int·b)·{·}