Ich möchte eine Methode testen, die eine Bibliothek eines Drittanbieters abfragt. Die Bibliothek gibt ein Objekt mit der Eigenschaft IReadOnlyCollection
zurück.Mock-Methode Rückgabewert mit schreibgeschütztem Merkmal
Es gibt keinen Konstruktor, um den Wert der Eigenschaft festzulegen, und das Objekt hat keine Schnittstelle für mich, um zu spotten.
Ich habe Moq
verwendet, um die Schnittstelle für den Dienst, den ich aufrufen, zu verspotten, aber ich kann keinen verspotteten Rückgabewert erstellen, da ich die Eigenschaft nicht festlegen kann.
public interface IHitService {
public Hit GetHit();
}
public class Hit {
public Hit() {
}
public IReadOnlyCollection<string> Result { get; }
}
public class TestingClass {
public void MyTest() {
Hit hit = new Hit() {
// cannot set this property
Result = new List<string>() { "hello","goodbye" };
}
Mock<IHitService> service = new Mock<IHitService>();
service.Setup(c => c.GetHit).Returns(hit);
}
}
Was wäre der beste Weg für mich, den Rückgabewert zu generieren, um meine Methode zu testen? Das Wrapping des Objekts mit einer new
-Eigenschaft zum Verbergen der Basis funktioniert nicht.
Wie wird es normalerweise eingestellt? –
und spielt es eine Rolle, wenn es nicht gesetzt ist? es ist eine Third Party Sache. Normalerweise testen Sie das nicht, nur Ihren eigenen Code –
Wir manipulieren die Daten in der Methode, die ich gerade teste. Es ruft 'GetHit()' auf und arbeitet mit den Daten in der 'Result'-Sammlung. Die Eigenschaft war ursprünglich ein IEnumerable, aber die neueste Version hat es in eine ReadOnlyCollection geändert. Ich bin mir nicht sicher, wie es in der Bibliothek steht. Das ist eine gute Idee, ich werde den Quellcode überprüfen. – hsimah