我正在使用Moq框架进行类的模拟。但是,我无法获取或调用Class的方法。如何在下面的单元测试中解决此问题?试图编译程序以提取Moq类中的方法。错误在下面列出。
课程:
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测试:
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?)
}
答案 0 :(得分:2)
Moq通过.Object
属性公开模拟对象。因此,您可以这样做:
parseVendorSupplytest.Object.FromCsv(csvLineTest);
说。我不确定这是您首先要做的。假设您尝试使用模拟记录器测试ParseVendorSupply
,我相信您的代码应如下所示:
[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
}
还要注意,如果不需要任何设置,可以使用Mock.Of<T>()
快捷方式直接检索模拟对象:
var parseVendorSupply = new ParseVendorSupply(Mock.Of<ILogger>());