如何使用 C# 为 Snowflake 编写 MS 单元测试

Posted

技术标签:

【中文标题】如何使用 C# 为 Snowflake 编写 MS 单元测试【英文标题】:How to write MS unit test for Snowflake using C# 【发布时间】:2020-06-24 07:17:49 【问题描述】:

我正在使用 Snowflake 连接器将我的 .NET Core 应用程序与 Snowflake 通信。 我的要求是为存储层编写 MS 单元测试

我的存储库类如下所示:

using (IDbConnection conn = new SnowflakeDbConnection())
            
                conn.ConnectionString = ConnectionString;
                conn.Open();
                 var cmd = conn.CreateCommand(); 
               cmd.CommandText = $"SELECT * from TABLENAME";
                var reader = cmd.ExecuteReader();
                 while (reader.Read())
                 
                            --do some operation
                 
                conn.Close();
            

我是否需要对原始 Snowflake 帐户执行单元测试,或者是否有像 In-Memory 这样的方法?

你能帮我解决这个问题吗?

【问题讨论】:

那不是类,而是 using 语句。 【参考方案1】:

避免与实现细节紧密耦合。专注于实现所需的逻辑并抽象出任何第 3 方的关注点。

创建一个简单的连接工厂抽象

public interface IDbConnectionFactory 
    IDbConnection CreateConnection();

一个简单的实现。

public class SnowflakeDbConnectionFactory: IDbConnectionFactory 
    public IDbConnection CreateConnection() 
        return new SnowflakeDbConnection();
    

存储库将明确依赖于工厂抽象并利用它

using (IDbConnection conn = factory.CreateConnection()) 
    conn.ConnectionString = ConnectionString;
    conn.Open();
    IDbCommand cmd = conn.CreateCommand(); 
    cmd.CommandText = $"SELECT * from TABLENAME";
    var reader = cmd.ExecuteReader();
    while (reader.Read()) 
        //--do some operation
    
    conn.Close();

这将允许在单独测试代码时模拟/存根抽象。 (即:单元测试)

【讨论】:

能否请您告诉我如何在 using 语句中获取工厂和 ConnectionString 的引用,这将仅在内存中执行?

以上是关于如何使用 C# 为 Snowflake 编写 MS 单元测试的主要内容,如果未能解决你的问题,请参考以下文章

将 Snowflake ODBC 驱动程序与 MS Access 一起使用

如何在 Snowflake 中编写等效的 IF ELSE adhoc sql 查询

如何在 C# 中使用 OleDB 列出 MS Access 文件中的所有查询?

如何在 powerBi 的高级编辑器中编写 Snowflake SELECT 语句查询

如何将参数传递给 ms 访问以取回数据

c#当将TIFF转换为PNG时,我如何获得与使用MS Paint相同的压缩