Lassen Sie uns sagen, dass ich die folgende Funktion haben möchte ich Test:Wie testen Sie Subsonic Lazy-Loaded Eigenschaften?
public void CancelOrder(Order order)
{
order.Status = "Cancelled";
_emailService.SendEmail(order.User.Email, "Your order has been cancelled!");
}
Nun ist die Order-Klasse ein SubSonic Klasse erzeugt und die User-Eigenschaft auf es ist faul-geladen, was bedeutet, dass, wenn ich order.User nennen .Email es tatsächlich eine SQL-Anweisung ausführt, um den Benutzer abzurufen.
Wenn ich dies testen wollte, würde ich Probleme haben, weil ich nicht wirklich möchte, dass mein Komponententest meine Datenbank trifft.
Meine aktuelle Lösung ist die CancelOrder Funktion Refactoring wie folgt aussehen:
public void CancelOrder(Order order)
{
order.Status = "Cancelled";
User user = _userRepository.GetByUserID(order.UserID);
_emailService.SendEmail(user.Email, "Your order has been cancelled!");
}
Dann kann ich den _userRepository.GetUserByID Stub() aufrufen, einen fest codierten Benutzerobjekt zurückzukehren.
Ist dies der beste Weg, dies zu tun? Ich denke, Sie könnten argumentieren, dass die zweite Implementierung sauberer ist, da der gesamte Datenzugriff über das Repository statt in den Eigenschaften verborgen erfolgt.