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?)
}
Moq macht das verspottete Objekt durch die .Object
Eigenschaft 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, ParseVendorSupply
mit 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.
Lass mich ein paar Worte sagen