Konvertera databasen till SQL CE för att kunna testa databasberoende kod

2015-02-10

Vi har hamnat i ett läge med Viola där vi har kopplat samman databasen med kodbasen lite för mycket för att vi ska kunna testa koden ordentligt. Genom att skapa en kopia av databasen i SQLCE kan vi lägga en kopia av databasen i testprojektet. Det är en tillfällig lösning som jag ska anvädna för att kunna komma igång med att skriva test på kod som är databasberoende.

Vi har befunnit oss i lite av ett moment 22 när det kommer till test av vissa delar i Viola. För att kunna refaktorisera med självförtroende behöver vi veta att refaktoriseringen inte förstörde något och för det behövs test. Men för att kunna skriva tester behöver koden vara testbar. Om då refaktoriseringen går ut på att få till en mer testbar kod, hur ska man då gå tillväga?

Edit: Fenomenet kallas för The Legacy Code Dilema och myntades av Michael Feathers.

When we change code, we should have tests in place. To put tests in place, we often have to change code.

Feathers, Michael / Working Effectively with Legacy Code, s.16.

Det slog mig idag att jag kunde skapa en kopia av Violas databas och kontertera den till SQL CE. På så vis får jag en fil som kan läggas in i testprojektet och som kan användas för att testa den kod som behöver en databas. Då slipper jag åtminstone förlita mig på en databasserver.

Sedan när vi har tester nog att våga bryta ut beroendena på databasen är det bara att inleda refaktoriseringen.

Sagt och gjort. Så här gör man för att åstadkomma detta:

Ladda ned tillägget SQL Server Compact/SQLite Toolbox för Visual Studio och starta det från Tools-menyn. Välj Export SQL Server to SQL Server Compact 4.0...

Sqlce _1

Fyll i nödvändig information i dialogrutan som dyker upp. Knappen Testa Anslutning är din vän. När du är klar trycker du på Ok och väntar på att verktyget ska sluta låsa Visual Studio, för när det sker är det klart.

För att testa att allt gick bra väljer du Add SQL Server Compact 4.0 Connection... och letar upp din fil. Beroende på vad du valde kan du behöva ange ett lösenord, men default är att det inte är någon inloggnig till dessa databaser.

Sqlce _3

Vill du vara säker på att datat är med är det bara att högerklicka på databasen, välja Open SQL Editor och se att allt verkar vara ok.

Nu är du redo att lägga in databasen i projektet. Själva filen lägger du in med Add Existing Item...

För att få din lösning att koppla upp sig mot databasen behöver du lägga till Nugetpaketet Microsoft SQL Server Compact Edition och lägga till en ConnectionString i din app.config. Så här ser det ut för filen i ovanstående exempel:

<addname="ViolaSQLServerDatabase"
connectionString="Data Source=viola-test.sdf"
providerName="System.Data.SqlServerCe.4.0" />

Sen är det bara att köra.

/Bibliotekarien - The Librarian