Ich versuche zu lernen, wie man TDD mit spöttischen / gefälschten Objekten implementiert. Eine der Fragen, die ich habe, ist, wie man eine Abhängigkeit in einer Anwendung initialisiert, die TDD implementiert. Ein Beispiel aus diesem Artikel Beginning Mocking With Moq 3 zeigt:
public class OrderWriter
{
private readonly IFileWriter fileWriter;
public OrderWriter(IFileWriter fileWriter)
{
this.fileWriter = fileWriter;
}
public void WriteOrder(Order order)
{
fileWriter.WriteLine(String.Format("{0},{1}", order.OrderId, order.OrderTotal));
}
}
In diesem Beispiel verwendet der Konstruktor einen IFileWriter
Parameter, vermutlich, weil Sie im Falle der tatsächlichen Anwendung den echten Dateischreiber und den gefälschten für den Komponententest angeben möchten. Meine Frage ist, wer in der realen Anwendung diesen Parameter liefert? Ich nehme an, es wird der Anrufer dieser Anwendung sein. Was ist, wenn es auch eine Abhängigkeit im Konstruktor gibt? Wird der Anrufercode auch dafür verantwortlich sein?
Vielleicht ist der bessere Weg, Fabrik zu verwenden. Wie würde diese Fabrik funktionieren? Und wie wird die Fabrik verteilt? Wird es wie oben beschrieben im Konstruktorparameter sein?