Как написать модульный тест MS для Snowflake на C #

Я использую Snowflake Connector для связи моего приложения .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?

Не могли бы вы помочь мне с этой проблемой?


person SAREKA AVINASH    schedule 24.06.2020    source источник
comment
Это не класс, а оператор использования.   -  person Marco    schedule 24.06.2020


Ответы (1)


Избегайте тесной привязки к деталям реализации. Сосредоточьтесь на реализации желаемой логики и абстрагировании от любых проблем третьих лиц.

Создайте простую абстракцию фабрики соединений

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();
}

Это позволит имитировать / заглушать абстракции при изолированном тестировании кода. (например: модульные тесты)

person Nkosi    schedule 24.06.2020
comment
не могли бы вы рассказать мне, как получить ссылку на factory и ConnectionString в операторе using, и это будет выполняться только в памяти? - person SAREKA AVINASH; 24.06.2020