【发布时间】:2021-10-20 00:15:47
【问题描述】:
当在用 C# 编写的服务文件中遇到以下行时,我在使用 Moq 运行单元测试时遇到问题。任何关于如何模拟这个特定调用的有价值的输入都将在这里受到赞赏。谢谢。这里 _context 是 DBContext 的实例。
var dataObj = _context.FromSqlNotRequired(query, commandParameters).rows;
单元测试设置:
private readonly Mock<P4IDBContext> _mockContext;
private readonly Mock<DbSet<MetricsCalibrated>> _metricsCalibratedMockSet;
private readonly Mock<DbSet<FilterResult>> _filterMockSet;
private readonly MetricsService _metricsService;
private readonly Mock<IMetricsService> metricsService;
private readonly Mock<Dictionary<String, String>> _dictionary;
private readonly SourceDataController controller;
//[Fact()]
public MetricsServiceTests()
{
metricsService = new Mock<IMetricsService>();
controller = new SourceDataController(metricsService.Object);
_metricsCalibratedMockSet = new Mock<DbSet<MetricsCalibrated>>();
_metricsCalibratedMockSet.Setup(m => m.AsQueryable()).Returns(_metricsCalibratedData);
_dictionary = new Mock<Dictionary<String, String>>();
_filterMockSet = new Mock<DbSet<FilterResult>>();
_filterMockSet.Setup(m => m.AsQueryable()).Returns(_filterData);
var commandParameters = new Dictionary<string, string>();
_mockContext = new Mock<P4IDBContext>();
_mockContext.Setup(m => m.MetricsCalibrated).Returns(_metricsCalibratedMockSet.Object);
_mockContext.Setup(m => m.FilterResult).Returns(_filterMockSet.Object);
_metricsService = new MetricsService(_mockContext.Object);
}
错误 - 消息:
Message:
System.NullReferenceException : Object reference not set to an instance of an object.
Stack Trace:
RelationalDatabaseFacadeExtensions.GetFacadeDependencies(DatabaseFacade databaseFacade)
RelationalDatabaseFacadeExtensions.GetDbConnection(DatabaseFacade databaseFacade)
DbContextExtensions.FromSqlNotRequired[T](DbContext context, String strSQL, Dictionary`2 commandParameters) line 24
MetricsService.GetBasicData(String wherePart, IDictionary`2 selectedDict, String timeInterval, Dictionary`2 commandParameters, String tillDate) line 242
MetricsService.GetFilteredData(FilterOptions options) line 64
MetricsServiceTests.TestGetFilteredData() line 63
【问题讨论】:
-
您是在测试
SourceDataController还是metricsService? -
我正在测试metricsService。
public void TestGetFilteredData() { var result = this._metricsService.GetFilteredData(validFilterOptions); Assert.NotNull(result); } -
查看link
-
FromSqlNotRequired 是我不熟悉的扩展。你能分享一个指向定义它的代码/库的链接吗?如果它类似于内置的 FromSql 方法,那么模拟它可能会非常复杂
-
@rgvlee PFB 代码。
public static (List<T> rows, List<string> colNames) FromSqlNotRequired<T>(this DbContext context, string strSQL, Dictionary<string, string> commandParameters) where T : class { List<T> ret = new List<T>(); var columns = new List<string>(); ........ ............................................. return (ret, columns); }
标签: c# moq dbcontext xunit.net