Moq eine Klasse und verwenden Sie immer noch ihre Methoden

user10634744

Ich mache einen Mock of a Class mit Moq-Framework. Ich kann jedoch die Methoden der Klasse nicht abrufen oder aufrufen. Wie würde ich dieses Problem im folgenden Unit-Test beheben? Der Versuch, ein Programm zu kompilieren, um die Methoden in Moq in der Klasse zu extrahieren. Der Fehler ist unten aufgeführt.

Klasse :

using System;
using ElectronicsStore.Models;
using Microsoft.Extensions.Logging;

namespace ElectronicsStore.Service
{
    public class ParseVendorSupply
    {
        private readonly ILogger _logger;

        public ParseVendorSupply(ILogger logger)
        {
            _logger = logger;
        }

        public VendorSupply FromCsv(string csvLine)
        {
            VendorSupply vendorsupply = new VendorSupply();

            try
            {
                string[] values = csvLine.Split(',');
                if (values.Length > 3)
                {
                    throw new System.ArgumentException("Too much data");
                }

                vendorsupply.VendorId = Convert.ToInt16(values[0]);
                vendorsupply.ProductId = Convert.ToInt16(values[1]);
                vendorsupply.Quantity = Convert.ToInt16(values[2]);
            }
            catch (Exception)
            {
                _logger.LogInformation("An exception was thrown attempting");
            }
            return vendorsupply;
        }       
    }
}

public Startup(IConfiguration configuration, ILogger<Startup> logger)
{
    Configuration = configuration;
    _logger = logger;
 }

public void ConfigureServices(IServiceCollection services)
{
     services.AddSingleton(new LoggerFactory().AddConsole().AddDebug());
     services.AddLogging();

NUnit-Test:

public class ParseVendorSupplyNunit
{

    [Test]
    public void FromCsv_ParseCorrectly_Extradata()
    {
        var logger = new Mock<ILogger>();
        Mock<ParseVendorSupply> parseVendorSupplytest = new Mock<ParseVendorSupply>(logger);
        var test = new Mock<ParseVendorSupply>(logger);
        string csvLineTest = "5,8,3,9,5";

       parseVendorSupplytest.FromCsv
       // Receive error: Mock<ParseVendorSupply>' does not contain a definition for 'FromCsv' and no accessible extension method 'FromCsv' accepting a first argument of type 'Mock<ParseVendorSupply>' could be found (are you missing a using directive or an assembly reference?)

    }
Kevin Gosse

Moq macht das verspottete Objekt durch die .ObjectEigenschaft verfügbar. In Ihrem Fall könnten Sie also Folgendes tun:

parseVendorSupplytest.Object.FromCsv(csvLineTest);

Das gesagt. Ich bin mir nicht sicher, ob Sie das überhaupt wollten. Angenommen, Sie versuchen, ParseVendorSupplymit einem verspotteten Logger zu testen , sollte Ihr Code folgendermaßen aussehen:

[Test]
public void FromCsv_ParseCorrectly_Extradata()
{
    var logger = new Mock<ILogger>();
    var parseVendorSupply = new ParseVendorSupply(logger.Object);

    string csvLineTest = "5,8,3,9,5";

    var result = parseVendorSupplytest.FromCsv(csvLineTest);

   // Add your assertions here 
}

Beachten Sie auch, dass Sie die Mock.Of<T>()Verknüpfung verwenden können, um das verspottete Objekt direkt abzurufen, wenn Sie kein Setup benötigen:

var parseVendorSupply = new ParseVendorSupply(Mock.Of<ILogger>());

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

Klasse nur erweitern, um ihre Methoden und Attribute zu verwenden

Verwandeln Sie die untergeordnete Klasse in ihre Oberklasse, können jedoch weiterhin Methoden und Eigenschaften der untergeordneten Klasse verwenden

So zeigen Sie immer noch eine Fehlermeldung an, wenn Sie try und außer in Python verwenden

C++, Wie kann eine Basisklasse eine untergeordnete Klasse als Member aufnehmen und ihre Methoden aufrufen?

Eine nicht abstrakte Klasse erben und alle ihre Funktionen in abstrakte Methoden umwandeln

Wie kann man eine undefinierte File () - Klasse und ihre Methoden in Dart reparieren?

Erstellen Sie eine C++-Klasse und verwenden Sie diese Klasse in einer anderen C++-Klasse, die JNI-Methoden in ndk android enthält

eine einseitige Webanwendung verwenden und immer noch '/login' oder '/register' verwenden

Schreiben Menschen immer noch ihre eigenen Datenstrukturen und Algorithmen?

So übergeben Sie eine Klasse als Parameter und erben Methoden

Wie man eine Klasse mit den Methoden Get () und Set () moq

Stellen Sie eine Axios-Get-Anfrage und verwenden Sie React useState, aber beim Protokollieren der Daten wird immer noch null angezeigt

Wenn Sie ModuleList verwenden, erhalten Sie immer noch ValueError: Optimizer hat eine leere Parameterliste

So verwenden Sie Methoden in der erweiterten Klasse und verwenden sie in der Hauptklasse

Durchlaufen Sie Variablen als Basisklassenobjekte, während Sie sie in untergeordnete Klassen umwandeln, und verwenden Sie ihre überschriebenen Methoden in C++

Verwenden Sie shareReplay (1) in Angular - ruft immer noch eine http-Anfrage auf?

Warum ich Unity bereits eine .dll hinzugefügt habe, sie aber immer noch nicht verwenden kann/

Wie kann ich eine Klasse weiterleiten und ihre Mitgliedsfunktionen später in C ++ verwenden?

Eine Eigenschaft von einer Klasse an ihre Zustandsklasse übergeben und in einem Text-Widget verwenden

Verwenden Sie Moq, um zu überprüfen, ob eine der beiden Methoden aufgerufen wurde

So verwenden Sie eine Manager-Klasse, um Charaktere und ihre Animationen in C++ mit der SFML-Bibliothek zu verwalten

Trennen Sie Angular und Django in AWS (während Sie immer noch eine praktische lokale Entwicklungsumgebung haben).

So erstellen Sie eine gemeinsam nutzbare Klasse, die andere für ihre Websites verwenden können

Verwenden Sie bei asynchronen Methoden in einer Bibliothek immer die Schlüsselwörter 'async' und 'await'?

Verwenden dieses Schlüsselworts in einer selbstverwalteten Singleton-Klasse Oder verwenden Sie immer eine Instanz

Konvertieren Sie eine Klasse in ihre Oberklasse

Symfony-Fehler: Weder die Eigenschaft noch eine der Methoden existieren und haben öffentlichen Zugriff in der Klasse

Wie erstelle ich eine Funktion und rufe ihre Methoden auf, ohne new zu verwenden, ähnlich wie bei jQuery $?

Wie kann ich eine private Methode in eine eigene Klasse einbinden, um sie immer wieder zu verwenden?

TOP Liste

heißlabel

Archiv