Mocking HttpPostedFileBase-und InputStream für unit-test
Möchte ich testen, die folgende Zeile des Codes:
...
Bitmap uploadedPicture = Bitmap.FromStream(model.Picture.InputStream) as Bitmap;
...
Bild ist eine Eigenschaft, die in meinem Modell Typ HttpPostedFileBase.
Also ich würde gerne zu verspotten, ein HttpPostedFileBase-Eigenschaft für unit-Tests:
model.Picture = new Mock<HttpPostedFileBase>().Object;
Überhaupt kein problem.
Nun habe ich zum simulieren der InputStream, sonst ist es null:
model.Picture.InputStream = new Mock<Stream>().Object;
Funktioniert das nicht, da der InputStream read-only ist (hat nicht eine setter-Methode):
public virtual Stream InputStream { get; }
Ist es eine gute und saubere Möglichkeit, dieses problem zu behandeln?
Eine Lösung wäre zum überschreiben HttpPostedFileBase in einer abgeleiteten Klasse für meine unit-test.
Jede andere Idee?
InformationsquelleAutor mosquito87 | 2013-03-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hallo 🙂 ich habe so etwas wie,
Und auf den Test selbst,
Hoffe, dies kann Ihnen eine Idee zu Ihrer Lösung 🙂
InformationsquelleAutor TiagoC13
Habe ich nur gearbeitet, auf die etwas ähnliches und wollte fügen Sie die folgenden @TiagoC13 Antwort.
Mein system unter test wurde eine Datei service, den ich Schreibe, eine der Voraussetzungen um zu testen, ob eine Datei hat die richtigen Abmessungen. Beachten Sie, dass der hart-codierten Dateinamens. Diese existiert als Ordner und die Datei in meinem Test-Projekt. Die Eigenschaften der Datei sind wie folgt: Buildvorgang : Eingebettete Ressource und Eigenschaft in Ausgabeverzeichnis Kopieren: Kopieren, wenn neuer (obwohl Immer Kopieren sollte funktionieren OK)
Wenn das Projekt gebaut ist die testimage.jpg und den Ordner Hinzugefügt, um die Behälter, in denen der test besteht, dann findet es.
Beachten Sie auch die fileStream.Close(); dadurch wird die Datei, so können Sie eine Reihe von ähnlichen tests in der gleichen suite.
Hoffe, dass dies helfen.
InformationsquelleAutor Daniel Hollinrake
Gibt es keine Notwendigkeit, einen stream erstellen, öffnen Sie eine Datei auf der Festplatte. Ich denke, das ist eine ziemlich schreckliche Lösung. Ein funktionierendes test-stream erstellt werden können, leicht genug im Speicher.
sehr schön @fearofawhackplanet!
es ist schrecklich, denn die OP ist explizit zu Fragen, über unit Tests und unit Tests sollten nicht in Abhängigkeit von der physischen Datei-system.
Fairer Punkt. Ihre Lösung ist immer noch in Ordnung, aber das, was der OP fordert und braucht nicht immer das gleiche. Wenn das Bild in das test-Projekt, Sie können es zu behandeln, als soft-Abhängigkeit. Eine Datenbank oder ein webservice ist eine ganz andere Geschichte. Keine externen Abhängigkeiten, um das Projekt bedeutet, dass Sie genauso sicher.
InformationsquelleAutor fearofawhackplanet