Um für Unit-Tests eine Test-Datenbank mit definierten Werten mittels SMO in .NET erzeugen und nach dem Test rückstandsfrei wieder löschen zu können, ist folgender Code nötig:
1: using System;
2: using System.IO;
3: using Microsoft.SqlServer.Management.Smo;
4: using NUnit.Framework;
5: using TestApplication.Domain.Repositories;
6:
7: namespace TestApplication.Repository.Tests {
8: [TestFixture]
9: public class ICustomerRepositoryTests {
10:
11: [SetUp]
12: public void Init() {
13: // Connect to SQL-Server instance
14: Server server = new Server(@"(local)\SQLEXPRESS");
15:
16: // Create new database
17: Database db = new Database(server, "TestDatabase");
18: db.Collation = "Latin1_General_CI_AS";
19: db.Create();
20:
21: // Create Tables and Data by SQL-Scripts
22: string projectPath =
23: @"C:\Dev\TestApplication\trunk\src\TestApplication\TestApplication.Repository.Tests\SqlScripts";
24:
25: string[] scriptFilenames = new[] {
26: "Customer_Table",
27: "Customer_Data",
28: "Supplier_Table",
29: "Supplier_Data"};
30:
31:
32: foreach (string scriptFilename in scriptFilenames) {
33: FileInfo scriptFile = new FileInfo(projectPath + "\\" + scriptFilename + ".sql");
34: string script = scriptFile.OpenText().ReadToEnd();
35: server.ConnectionContext.ExecuteNonQuery(script);
36: }
37:
38: // Close SQL-Server connection
39: server.ConnectionContext.Disconnect();
40:
41: }
42:
43:
44: [TearDown]
45: public void Dispose() {
46:
47: // Connect to SQL-Server instance
48: Server server = new Server(@"(local)\SQLEXPRESS");
49:
50: // Connect to Database and refresh its state
51: Database db = new Database(server, "TestDatabase");
52: db.Refresh();
53:
54: // Delete database and close SQL-Server connection
55: db.Drop();
56: server.ConnectionContext.Disconnect();
57: }
58: }
59: }
Außerdem müssen Referenzen auf folgende Assemblies vorhanden sein:
- Microsoft.SqlServer.ConnectionInfo
- Microsoft.SqlServer.Smo
- Microsoft.SqlServer.SmoEnum
- Microsoft.SqlServer.SqlEnum
Bei den .sql Files handelt es sich um normale SQL-Scripts für Create Table und Insert für die Daten.