C# 如何使用Dapper.Contrib在.NET内核中使用xUnit编写测试?
我在Asp.Net核心Web API项目中使用了Dapper.Contrib。 在这个项目中,我在使用xUnit编写测试时遇到了一个问题。 例如,下面是我向数据层添加记录的方法C# 如何使用Dapper.Contrib在.NET内核中使用xUnit编写测试?,c#,unit-testing,.net-core,xunit,C#,Unit Testing,.net Core,Xunit,我在Asp.Net核心Web API项目中使用了Dapper.Contrib。 在这个项目中,我在使用xUnit编写测试时遇到了一个问题。 例如,下面是我向数据层添加记录的方法 public async Task<bool> AddAsync(User entity) { await using var connection = _dbConnection.CreateDbConnection(); await connection.OpenA
public async Task<bool> AddAsync(User entity)
{
await using var connection = _dbConnection.CreateDbConnection();
await connection.OpenAsync();
return await connection.InsertAsync(entity) > 0;
}
public async Task AddAsync(用户实体)
{
等待使用var connection=_dbConnection.CreateDbConnection();
等待连接。OpenAsync();
返回等待连接。InsertAsync(实体)>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);
}
[事实]
public void AddAsync_应_按预期返回_()
{
var connection=newmock();
//安排
_userDbConnection.Setup(u=>u.CreateDbConnection())。返回(connection.Object);
//表演
var result=_sut.AddAsync(_user.GetAwaiter().GetResult();
//断言
//断言。相等(结果,实际);
}
当我运行这个测试方法时,我在
'返回等待连接。插入同步(实体)>0;'线路
我的错误到底是什么?我相信现在发生的是,您正在使用一个模拟连接,并试图调用一个简洁的方法,
InsertAsync
。简洁的方法不可避免地会失败,因为它不是真正的连接
我不确定在这里使用mock可以获得多少价值。在测试AddAsync时,您真正想知道的是,它是否真正执行了您希望它执行的操作,即向数据库中插入数据。因此,如果我是你,我会通过使用真实连接而不是模拟连接,将此测试转换为集成测试。一种方法是
我不一定推荐这样做,但另一种方法可能是使用内存中的数据库。请参阅示例。错误很明显-您试图在仅配置了
CreateDbConnection
的模拟连接上使用InsertAsync
。您也应该设置InsertAsync
。