C# 单元测试Dapper/SqlConnection查询

C# 单元测试Dapper/SqlConnection查询,c#,unit-testing,dapper,C#,Unit Testing,Dapper,我有以下服务,我想为其创建单元测试 public class Service { public async Task<IEnumerable<Person>> GetPeople(string connString) { var conn = new SqlConnection(connString); await conn.OpenAsync(); return await conn.QueryAsync&

我有以下服务,我想为其创建单元测试

public class Service
{
    public async Task<IEnumerable<Person>> GetPeople(string connString)
    {
        var conn = new SqlConnection(connString);
        await conn.OpenAsync();
        return await conn.QueryAsync<Person>("SELECT * FROM People");
    }

    public class Person
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
}
公共类服务
{
公共异步任务GetPeople(字符串connString)
{
var conn=新的SqlConnection(connString);
等待连接OpenAsync();
return wait conn.QueryAsync(“从人中选择*);
}
公共阶层人士
{
公共字符串名{get;set;}
公共字符串LastName{get;set;}
}
}
我将传递一个连接字符串以连接到数据库。 我知道我需要创建一个内存数据库,然后创建db结构,然后创建表,然后插入一些数据,然后使用服务进行查询

我试着使用InMemoryDatabase,但这似乎是为了EF代码


我的问题是如何为上述代码创建单元测试,这些代码将在内存中运行,因为这也将运行azure。

您必须进行一些重构,才能正确地对该类进行单元测试

  • connString
    作为构造函数参数传递,它不应该是接口的一部分
  • 使用
    GetPeople
    方法提取接口
    IService
  • 可以使用从内存集合中返回人员序列的替代实现,也可以使用类似于
    Moq
    的框架来配置
    IService.GetPeople
    的预期行为,以返回
    Person

  • 你将测试什么?服务中没有逻辑。我想您有更多的代码,但是在没有数据库的情况下可能会进行测试。如果您实际上正在编写集成测试,那么应该使用正确的数据库提供程序。