Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Testning är ett viktigt problem för nästan alla programtyper – det gör att du kan vara säker på att ditt program fungerar korrekt och gör det omedelbart känt om dess beteende går tillbaka i framtiden. Eftersom testning kan påverka hur koden är konstruerad rekommenderar vi starkt att du planerar för testning tidigt och att säkerställa god täckning allteftersom ditt program utvecklas. Det här introduktionsavsnittet ger en snabb översikt över olika teststrategier för program som använder EF Core.
Involverar databasen (eller inte)
När du skriver tester för DITT EF Core-program är ett grundläggande beslut du måste fatta om dina tester kommer att omfatta ditt produktionsdatabassystem – precis som ditt program gör – eller om dina tester körs mot en testdubblett, vilket ersätter ditt produktionsdatabassystem. Två framträdande exempel på testdubblar i EF Core-kontexten är SQLite i minnesläge och minnesleverantören.
En djupgående jämförelse och analys av de olika metoderna finns i Välja en teststrategi. Nedan visas en kort punkt-för-punkt-sammanfattning som hjälper dig att komma igång med de olika alternativen:
- Utvecklare undviker ofta testning mot sitt produktionsdatabassystem eftersom de anser att detta är svårt eller långsamt. Detta är inte alltid sant i vår erfarenhet, och vi föreslår att du ger den här metoden en chans: Testning mot ditt produktionsdatabassystem ger tekniker för att göra detta på ett tillförlitligt och effektivt sätt. Att skriva åtminstone vissa tester mot databasen är vanligtvis nödvändigt i alla fall – för att se till att programmet faktiskt fungerar mot produktionsdatabasen – och att tester som inte involverar databasen kan begränsas i vad de gör att du kan testa (se nedan).
- Den in-memory-leverantören kommer inte att bete sig som din verkliga databas på många viktiga sätt. Vissa funktioner kan inte testas med den alls (t.ex. transaktioner, rå SQL..), medan andra funktioner kan bete sig annorlunda än din produktionsdatabas (t.ex. skiftlägeskänslighet i frågor). Även om minnesinternt kan fungera för enkla, begränsade frågescenarier är det mycket begränsat och vi avråder från att använda det.
- Att
DbSethåna frågor är komplext och svårt och har samma nackdelar som minnesintern metod. Vi avråder även från detta.
- Att
- SQLite i minnesläge ger bättre kompatibilitet med relationsdatabaser för produktion, eftersom SQLite i sig är en fullfjädrad relationsdatabas. Det kommer dock fortfarande att finnas några viktiga skillnader mellan SQLite och din produktionsdatabas, och vissa funktioner kan inte testas alls (t.ex. providerspecifika metoder på EF. Funktioner).
- För en testmetod som gör att du kan använda ett tillförlitligt testdubblett för alla funktioner i ditt produktionsdatabassystem är det möjligt att introducera ett lagringsplatslager i ditt program. På så sätt kan du helt exkludera EF Core från testprocessen och fullständigt simulera lagringsplatsen; detta ändrar dock arkitekturen för din applikation på ett sätt som kan ha betydande påverkan och innebär ökade implementerings- och underhållskostnader.
Ytterligare läsning
Mer detaljerad information finns i Välja en teststrategi. Riktlinjer för implementering och kodexempel finns i Testa mot ditt produktionsdatabassystem och Testa utan ditt produktionsdatabassystem.