如何解决如何使用 C#、MOQ 和 XUnit 将测试数据初始化为模拟上下文?
我在 C# .NET Core 3.1 中有这个设置。
public class IngestServiceTest
{
private Mock<IDowJonesContext> mockDowJonesContext;
private ILogger<object> _logger;
private readonly IngestService ingestService;
public IngestServicetest()
{
IConfiguration configuration = new ConfigurationBuilder().AddJsonFile("appsettings.test.json").Build();
_logger = LoggerFactory.Create(builder => builder.AddConsole()).CreateLogger<object>();
mockDowJonesContext = new Mock<IDowJonesContext>();
ingestService = new IngestService(mockDowJonesContext.Object,configuration,_logger);
}
[Fact]
private void SetupMockData()
{
var data = TestData.MockFileProcessLogs();
mockDowJonesContext.Object.FileProcessLogs.AddRange(data);
mockDowJonesContext.Object.SaveChanges();
}
}
但是在 mockDowJonesContext.Object.FileProcessLogs.AddRange(data);
处,它遇到错误 System.NullReferenceException: 'Object reference not set to an instance of an object.'
我已经检查过了。 data
有 3 行计数。
解决方法
这不是您通常使用模拟的方式。在模拟的 Object
属性上调用方法或属性在大多数情况下是错误的,因为这是对模拟本身的直接调用,不会向测试添加任何值。你想要的可能是这样的:
[Fact]
private void SetupMockData()
{
var data = TestData.MockFileProcessLogs();
mockDowJonesContext.Setup(x => x.FileProcessLogs).Returns(data);
mockDowJonesContext.Setup(x => x.SaveChanges());
// and then:
ingestService.DoSomeProcessing();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。