Frage

Ich habe eine öffentliche Methode, die eine lokale private Methode verwendet, um Daten von der DB zu erhalten.

private string SomeMethod(string) { ... Doing some operations ... string data = GetDBData(string); Doing some operations ... }

Ich möchte die private Methode getdbdata (Zeichenfolge) mit Maulwürfen umleiten/isolieren, sodass mein Test nicht die DB benötigt.

Offensichtlich ist meine Frage: Wie geht es mir? Danke Uria

BEARBEITEN
Zusätzliche Information:

Ich habe versucht, die Methodenzubehör sowohl in öffentliche als auch in interne geschützte zu ändern. In beiden Fällen kann ich jetzt die Methoden als Maulwürfe sehen. Aber beim Ausführen des Tests wird die ursprüngliche Methode immer noch verwendet und nicht der Umweg, den ich im PexMethod implementiert habe.

War es hilfreich?

Lösung 2

Ich habe es herausgefunden

Wenn ich die öffentliche Myclass mit privatem Einzelethod habe

public class MyClass
{
    private string SomeMethod(string str){}
}

Wenn Sie die Somethod -Methode mietieren möchten, müssen Sie Allinstanzen in der Testmethode verwenden:

[PexMethod]
SomeMethod(string str)
{
    MMyClass.AllInstances.SomeMethod = (instance, str) => { return "A return string"; };
}
  • Beachten Sie, dass die Lambda einen Instanzparameter als erster Parameter empfängt. Ich bin mir nicht sicher, wie es ist, was es ist.

Andere Tipps

Sie können die folgenden Aussagen ausprobieren.

  • Machen Sie die Methode intern und fügen Sie der Baugruppe ein solches Attribut hinzu:

    [assembly: InternalsVisibleTo("<corresponding-moles-assembly-name>")]

  • Ändern Sie den Zugriff auf Methode auf Virtuell geschützt und dann einen Stummel verwenden.

  • Wiederholen Sie Ihre Klasse so, dass sie eine Schnittstelle (idataaccessObject) als Konstruktorparameter erhält.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top