mongodb - moq mongodb InsertOneAsync 方法
问题描述
我正在使用带有 .net 核心的 Mongodb 数据库。我只想最小起订量插入使用mongodbContext
. 这是我正在尝试做的,但它不起作用:
public void InsertEventAsync_Test()
{
//Arrange
var eventRepository = EventRepository();
var pEvent = new PlanEvent
{
ID = "testEvent",
WorkOrderID = "WorkOrderID",
IsDeleted = false,
IsActive = true,
EquipmentID = "EquipmentID"
};
////Act
//mockEventContext.Setup(mr => mr.PlanEvent.InsertOne(It.IsAny<PlanEvent>(), It.IsAny<InsertOneOptions>()))
mockEventContext.Setup(s => s.PlanEvent.InsertOneAsync(It.IsAny<PlanEvent>(), It.IsAny<InsertOneOptions>())).Returns("sdad");
var result = eventRepository.InsertEventAsync(pEvent);
////Assert
result.Should().NotBeNull();
}
以下是我需要起订量的方法:
public EventRepository(IFMPContext eventContext)
{
_eventContext = eventContext;
}
public async Task<string> InsertEventAsync(Model.EventDataModel.PlanEvent eventobj)
{
eventobj._id = ObjectId.GenerateNewId();
eventobj.CreatedDateTime = DateTime.UtcNow.ToString();
try
{
_eventContext.PlanEvent.InsertOne(eventobj);
return eventobj.ID;
}
catch (Exception ex)
{
string x = ex.Message;
}
return "";
}
解决方案
假设
public class EventRepository {
private readonly IFMPContext eventContext;
public EventRepository(IFMPContext eventContext) {
this.eventContext = eventContext;
}
public async Task<string> InsertEventAsync(Model.EventDataModel.PlanEvent eventobj) {
eventobj._id = ObjectId.GenerateNewId();
eventobj.CreatedDateTime = DateTime.UtcNow.ToString();
try {
await eventContext.PlanEvent.InsertOneAsync(eventobj);
return eventobj.ID;
} catch (Exception ex) {
string x = ex.Message;
}
return "";
}
}
您需要配置测试以支持被测方法的异步特性
public async Task InsertEventAsync_Test()
{
//Arrange
var expected = "testEvent";
var pEvent = new PlanEvent {
ID = expected,
WorkOrderID = "WorkOrderID",
IsDeleted = false,
IsActive = true,
EquipmentID = "EquipmentID"
};
var mockEventContext = new Mock<IFMPContext>();
mockEventContext
.Setup(_ => _.PlanEvent.InsertOneAsync(It.IsAny<PlanEvent>(), It.IsAny<InsertOneOptions>()))
.ReturnsAsync(Task.FromResult((object)null));
var eventRepository = new EventRepository(mockEventContext.Object);
//Act
var actual = await eventRepository.InsertEventAsync(pEvent);
//Assert
actual.Should().NotBeNull()
actual.Should().Be(expected);
}
需要将测试方法定义更新为异步的,以允许等待被测方法。还需要以这样的方式设置模拟依赖项,以允许异步流在调用时按预期继续。
推荐阅读
- angular - 如何在屏幕上显示角度初始化 svg 动画?
- excel-formula - 条件格式 - 工作表
- python - 使用 BeatifulSoup,我如何通过 find_all 获取内容?
- c# - 在 Linq 表达式中重构
- c++ - 如何从 xz api 中提取未压缩文件的大小?
- node.js - 如何从 restify 框架中删除响应标头
- c++ - 一个头文件中的类名使用,不包括类定义头文件
- python - 将 PDF 表格作为文本导入时处理空白单元格
- reactjs - 在 React Input 中,如何将输入的每个字母转换为大写字母,但是您可以在中间输入而光标不会在每次按键时跳到结尾?
- macos - 如何在没有依赖关系的情况下向 OS X 上的 USB 设备发送命令(仅从命令行)?