moq, wie zu testen die save-Methode?
Habe ich eine save () - Methode nicht wirklich sicher, wie Sie Sie zu testen. unten ist mein code.
public interface IRepository<T>
{
T Get(int id);
void Save(T item);
void Delete(int id);
}
save-Methode keine return-Werte zurück, ich kann nicht vergleichen Sie den Wert. jedoch, ich habe bereits 4 Benutzer nach dem hinzufügen noch eines, das ich nur die Gesamtzahl der Nutzer, ist es genug, um es zu testen?
[Test]
public void Add_a_new_smoothie_user_should_return_total_5_users()
{
//Arrange
var totalUsers = _users.Count();
_mockUserRepository.Setup(s => s.Save(It.IsAny<User>()))
.Callback((User user) => _users.Add(user));
var newUser = new User
{
Id = 3,
Email = "[email protected]",
Password = "1234567".Hash(),
Firstname = "",
Lastname = "",
CreatedDate = DateTime.Now,
LastLogin = DateTime.Now,
AccountType = AccountType.Smoothie,
DisplayName = "",
Avatar = "",
ThirdPartyId = "",
Status = Status.Approved,
Ip = "127.0.0.1"
};
//Act
_mockUserRepository.Object.Save(newUser);
//Assert
Assert.AreEqual(5, _users.Count());
Assert.AreEqual(1, _users.Count() - totalUsers);
}
- Können Sie skizzieren Ihre "speichern" - Methode? Haben Sie Ihre code-Abdeckung'? Ich glaube nicht, dass das hinzufügen von 'x' - Benutzer, um Ihre mock Validierung der Methode effektiv. Stattdessen sollten Sie konzentrieren sich auf Tests, werden alle Flüsse (Haupt -, alternative -, Ausnahme -, etc.) so, die code-coverage-ist relativ hoch.
- Ich weiß nicht Recht bekommen es Sie moq repository save-Methode zum ausführen Ihrer Stellvertretung. Was du testen hier? Können Sie Anbieter im Test-code, der ausgeführt wird, in diesem test?
- mein "save" - Methode nur speichert, einen neuen Benutzer für die Datenbank. Ich habe den code noch, nur die Schnittstelle. Ich dachte, Sie haben zu schreiben unit-test zuerst vor dem schreiben hte konkrete Methode.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du bist lustig das Teil der Funktionalität, die Sie versuchen zu testen. Diese tests nichts beweisen, andere als
Add()
Methode der Daten-Typ Sie sind halt die Benutzer. Am Ende wird es nicht geben, keine Ideen, wenn Ihr repository arbeitet.Sollten Sie versuchen, zu implementieren Datenbank-Sandbox zum testen Ihrer repository-Funktionalität.
Nie tests schreiben, für verspottet-code, weil diese tests eigentlich nicht testen nichts (naja, außer mocking-framework-Implementierung).
Wie schaffen Schnittstellen mit test-first-Ansatz? Es ist ganz einfach. Betrachten Sie einige
FooController
, was erfordert einige Daten. Irgendwann (beim schreiben von tests für controller) entscheiden Sie, dass es einige Abhängigkeiten, die vorsehen, dass Daten auf den controller (ja, repository). Ihre aktuelle controller-test benötigt einige Funktionen, um einigeBar
Objekt aus dem Daten-Speicher. So schreiben Sie ein test -Dieser test wird nicht kompilieren, da zu diesem Zeitpunkt Sie nicht haben
IBarRepository
- Schnittstelle, die erforderlich ist, durch den controller. Sie erstellen diese Schnittstelle. Und auch add-MethodeGetById
an diese Schnittstelle an. Nach der Implementierung von controller.Gute Nachricht - wenn der controller fertig sein wird, haben Sie
IBarRepository
definition der Schnittstelle, die API-sehr praktisch für den controller.Nächste Schritt ist die Erstellung
IBarRepository
Umsetzung. Schreibe ich selten tests für repositories. Aber, Sie können es tun, haben Sie mehrere Möglichkeiten:Wo das repository zu speichern? Wenn es das speichern in einer Datei, dann können Sie vergleichen Sie Ihre Datei mit den model-Datei (gold), wo alles wurde manuell überprüft und ist ok. Wenn ist einige Datenbank-dann sollten Sie verspotten Ihrer Datenbank-interface, Protokollierung aller Abfragen einfügen und dann vergleichen Sie das log mit dem idealen Protokoll.