Mitglied einer verspotteten Klasse kann nicht initialisiert werden

Javirs

Ich habe eine Schnittstelle, die Mitglieder hat, ungefähr so:

public interface IDataLoader
{
    //other stuff
    // tools for loading the items to be processed from disk or cloud
    CustomCollection ItemsToBeProcessed {get; set;}
}

Ich mache UTs für andere Komponenten des Systems, die diese verbrauchen, ItemsToBeProcessedund ich möchte die Komplexität und Abhängigkeiten beim Laden vermeiden.

In jedem UT möchte ich die ItemsToBeProcessed mit bestimmten fest codierten Daten füllen. Führen Sie dann die Daten dem zu testenden Modul (dem Prozessormodul) zu und vergleichen Sie die Ausgabe mit bestimmten fest codierten erwarteten Daten.

Mein Problem ist, dass ich dies nicht initialisieren kann ItemsToBeProcessedund nicht verstehe, warum.

Dies ist meine UT bisher:

[Test]
public void DataProcessor_TestData1_asExpected()
{
    Mock<IDataLoader> mokedAmplifier = new Mock<IDataLoader>(MockBehavior.Loose);
    MainController.Loader = mokedAmplifier.Object;
    if(MainController.Loader.ItemsToBeProcessed == null)
        MainController.Loader.ItemsToBeProcessed = new CustomCollection();

    // here the MainController.Loader.ItemsToBeProcessed is still null.. why???

    var TestData = LoadTestData("testData1.xml");
    var ExpectedData = LoadExpectedData("ExpectedData1.xml")

    MainConroller.Loader.ItemsToBeProcessed.AddRange(TestData);

    var ProcessingModuleBeingTested = new ProcessingModule();
    var results = ProcessingModuleBeingTested.Process(MainController.Loader.ItemsToBeProcessed);
    Asert.isEqual(ExepctedData, results);
}

Wie initialisiere ich dieses Mitglied?

Nkosi

Verspotten Sie das gewünschte Mitglied, um beim Aufrufen ein verwendbares Objekt zurückzugeben.

var collection = new CustomCollection();
var mokedAmplifier = new Mock<IDataLoader>(MockBehavior.Loose);

mokedAmplifier.Setup(_ => _.ItemsToBeProcessed).Returns(collection);

//...

Wenn Sie möchten, dass sich der Mock an Änderungen an der Eigenschaft erinnert, verwenden Sie SetupAllProperties

Gibt an, dass alle Eigenschaften des Modells "Eigenschaftsverhalten" haben sollen. Wenn Sie also den Wert festlegen, wird es gespeichert und später zurückgegeben, wenn die Eigenschaft angefordert wird. (Dies wird auch als "Stubbing" bezeichnet). Der Standardwert für jede Eigenschaft ist der Wert, der gemäß der Eigenschaft Moq.Mock.DefaultValue für das Modell generiert wird.

var mokedAmplifier = new Mock<IDataLoader>(MockBehavior.Loose);

mokedAmplifier.SetupAllProperties(); //<--

MainController.Loader = mokedAmplifier.Object;

if(MainController.Loader.ItemsToBeProcessed == null)
    MainController.Loader.ItemsToBeProcessed = new CustomCollection();

//...

Verweisen Sie auf Moq Quickstart , um Hilfe zum Verständnis des Mocking-Frameworks zu erhalten.

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Die Methode der verspotteten Klasse kann nicht aufgerufen werden

googlemock: Objekt der verspotteten Klasse kann nicht erstellt werden

Klasse kann nicht mit "if" initialisiert werden

Warum kann eine Mitgliedsvariable vom Typ Smart Pointer nicht an der deklarierenden Stelle in einer Klasse initialisiert werden?

Das Spark-Objekt kann in einer Python-Klasse nicht initialisiert werden

Wie kann der Zugriff auf ein nicht konstantes öffentliches Mitglied m einer Klasse A auf eine andere Klasse B beschränkt werden, die A als nicht konstantes Mitglied enthält?

Warum kann die Instanzvariable nicht in der Klasse initialisiert werden?

Instanz einer Klasse, die eine generische Schnittstelle schließt, die nicht implizit in ein Mitglied des generischen Schnittstellentyps umgewandelt werden kann

Ein globaler Wert in einer verspotteten Funktion kann mit mock_open () nicht getestet werden.

Ein Strukturarray innerhalb einer Struktur kann nicht initialisiert werden

SqlParameter kann nicht initialisiert werden

Mockito kann nicht initialisiert werden

CameraX kann nicht initialisiert werden

Detox - Klasse DefaultKotlinSourceSetKt konnte nicht initialisiert werden

Warum kann auf das öffentliche Mitglied des Elternteils nur innerhalb einer Methodendefinition zugegriffen werden, nicht jedoch auf die daraus abgeleitete Klasse?

Mitglied der öffentlichen Klasse in der Scala-Klasse, auf das in der Java-Klasse nicht zugegriffen werden kann

Klasse mit explizitem Destruktor und std :: unique_ptr <> -Mitglied kann nicht in std :: vector <> verwendet werden?

Warum kann in einer C ++ - Klasse nur ein Integral- oder Aufzählungstyp initialisiert werden?

Eine Klasse kann nicht mit der Singleton-Methode initialisiert werden

Ein Vektor von unique_ptr in der Klasse kann nicht initialisiert werden

Objekt der Detector-Klasse kann nicht von py-feat initialisiert werden

Die Eigenschaften einer Klasse können während der Objekterstellung nicht direkt in Java initialisiert werden

Die abgeleitete Klasse kann ein privates Mitglied in der Basisklasse nicht mit dem einer anderen Basisklasse überladen

Warum kann auf das private Mitglied einer verschachtelten Klasse mit den Methoden der einschließenden Klasse zugegriffen werden?

Fehler: Der nicht aggregierte Typ 'vector <int>' kann nicht mit einer Initialisierungsliste initialisiert werden

Fehler: Nicht aggregierter Typvektor <int> kann nicht mit einer Initialisiererliste initialisiert werden

Winkel: Mitglied <Funktionsname> kann nicht aufgerufen werden

Mitglied <Methode> kann nicht verwendet werden

PHP Mysqli kann nicht initialisiert werden