Frage

Wie kann ich Test für den Zustand in einer S # arp Architektur-Projekt?

Zum Beispiel habe ich einen benutzerdefinierten Roleprovider. Ich möchte die Methode provider.AddUsersToRoles (string [], String []) testen.

So beginne ich mit:

// Arrange
const string ficticiousRole = "Management";
var userToExpect = UserInstanceFactory.CreateValidTransientUser();
var roleToExpect = RoleInstanceFactory.CreateValidTransientRole();

userRepository.Expect(r => r.GetByUsername(userToExpect.Username))
              .Return(userToExpect);
roleRepository.Expect(r => r.GetByName(ficticiousRole))
              .Return(roleToExpect);

var userNames = new List<string>();
var roleNames = new List<string>();
userNames.Add(userToExpect.Username);
roleNames.Add(ficticiousRole);

Dann füge ich den Benutzer zu einer Rolle. Dann überprüfe ich, ob der Benutzer in dieser Rolle ist.

// Act
roleProvider.AddUsersToRoles(userNames.ToArray(), roleNames.ToArray());
var isNewUserInRole = roleProvider.IsUserInRole(userToExpect.Username, ficticiousRole);

// Assert
Assert.IsTrue(isNewUserInRole);

Das Problem ist, dass ich mit Rhino Mocks. Ich begrenzte Wissen über Rhino Mocks, aber von dem, was ich verstehe (nach Ayende Rahien) verwenden Sie Rhino Mocks zu Test für den Betrieb, nicht Staat.

Also ich denke, eine speicher SqlLite db besser geeignet wäre? Was ist der beste Weg, dies in S # arp Arch zu tun?

War es hilfreich?

Lösung

Sie können nicht mit Rhino Mocks tun, da dies einfach ein Mockframework ist, dass Fälschungen Dinge wie Datenbankaufrufe, etc. Es klingt wie Sie wollen tatsächlich Test Persistenz in der Datenbank, die im Grunde Prüfdatenbasis Integration. In diesem Fall würden Sie am meisten wollen auf jeden Fall eine In-Memory-Datenbank verwenden, wie SqlLite (wenn möglich!) Zu der Kollision mit einer SQL-Server-Instanz gegenüber.

Was Sie tun mögen, zu Beginn jeden Test oder Testklasse ist abzureißen die Datenbank, wenn es bereits vorhanden ist, um die Datenbank neu zu erstellen, die Datenbank mit einigen Samen Daten füllen und dann testen Sie Ihre Datenbank-Interaktion. Auf diese Weise können Sie eine bekannte Datenbank Zustand sicherstellen müssen vor jedem Test durchgeführt wird.

Eine Sache, die ich an einem Projekt tat, war alle meine Nur-Lese-Tests in einer Testklasse gruppiert, so dass ich nur Schritt zu tun hatte, wieder aufbauen die Datenbank einmal für die Klasse und zog alle meine löschen, aktualisieren und Einsatztests in andere Testklassen, die die Datenbank vor jedem Test wieder aufgebaut. genug Tests gegeben, kann dies sehr zeitaufwendig sein und wünschen kann CI-Server verbannt werden.

Andere Tipps

Ohne den Rest des Codes zu sehen, wäre es schwierig, diese zu beantworten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top