[英]How to write a test with xUnit in .NET Core using Dapper.Contrib?
我在我的 Asp.Net Core Web API 项目中使用了 Dapper.Contrib。 我在这个项目中使用 xUnit 编写测试时遇到了问题。 例如,这是我将记录添加到数据层的方法。
public async Task<bool> AddAsync(User entity)
{
await using var connection = _dbConnection.CreateDbConnection();
await connection.OpenAsync();
return await connection.InsertAsync(entity) > 0;
}
我尝试按照这种方法编写的xUnit方法如下。
[Fact]
public void AddAsync_Should_Return_As_Expected()
{
var connection = new Mock<DbConnection>();
//Arrange
_userDbConnection.Setup(u => u.CreateDbConnection()).Returns(connection.Object);
//Act
var result = _sut.AddAsync(_user).GetAwaiter().GetResult();
//Assert
//Assert.Equal(result,actual);
}
当我运行这个测试方法时,我得到 object not set error in 'return await connection.InsertAsync(entity) > 0;' 线。
我到底有什么错?
我相信正在发生的事情是您正在使用模拟连接并尝试在其上调用 Dapper 方法InsertAsync
。 Dapper 方法不可避免地会失败,因为它不是真正的连接。
我不确定在这里使用模拟可以获得多少价值。 您真正想知道的是,在测试 AddAsync 时,它是否真的按照您希望的方式将数据插入数据库。 所以如果我是你,我会通过使用真实连接而不是模拟连接将这个测试变成集成测试。 一种方法是
我不一定推荐这个,但另一种方法可能是在 memory 数据库中使用。 参见例如单元测试 Dapper Repositories 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.