Поддельный SqlConnection с mstest - PullRequest
       11

Поддельный SqlConnection с mstest

0 голосов
/ 30 декабря 2018

Я слежу за несколькими ответами по стеку / другим из здесь и здесь , но мне трудно писать тесты для SqlConnection.Я не хочу использовать какой-либо репозиторий, так как это небольшое одноразовое действие, которое будет выполняться каждый день и никогда не изменится.Хотя у меня есть метод GetData ниже в интерфейсе

Пока мой код:

public DataSet GetData()
    {
        DataSet dataSet = new DataSet("dataset"); 
        string connectionString = "my connection string";        
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();
            SqlDataAdapter adapter = new SqlDataAdapter();
            SqlCommand command = new SqlCommand("myStoredProc", connection);
            command.CommandType = System.Data.CommandType.StoredProcedure;
            adapter.SelectCommand = command;
            adapter.Fill(dataSet);
            return dataSet;
        }
    }

и модульный тест (новый здесь в написании тестов (:)

    [TestMethod]
    public void GetDevices_That_ReturnsDataSet()
    {
        string connectionString = "Server=tcp:localserver,1433;Initial Catalog=mydb;Persist Security Info=False;User ID=userid;Password=password;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;";

        using (ShimsContext.Create())
        {

   System.Data.Common.Fakes.ShimDbConnection.AllInstances.CreateCommand = (c) => {
                c.ConnectionString = connectionString;
                return new ShimSqlCommand();
            };
            ShimSqlConnection.AllInstances.ValidateConnectionForExecuteStringSqlCommand = (co, s, cmd) => {  };
            ShimSqlConnection.AllInstances.Open = (c) =>
            {
                c.ConnectionString = connectionString;
            };
            ShimSqlConnection.AllInstances.Close = (c) => { };
            ShimSqlConnection.AllInstances.StateGet = (c) => ConnectionState.Open;
            ShimSqlConnection.AllInstances.ServerVersionGet = (c) => "14.0";
            ShimSqlConnection.AllInstances.ClientConnectionIdGet = (c) => It.IsAny<Guid>();
            ShimSqlConnection.AllInstances.CredentialGet = (c) => new ShimSqlCredential();
            ShimSqlDataReader.AllInstances.Close = (c) => { };
            // Faking Adapter, from command for current instance of command
            ShimSqlDataAdapter.ConstructorSqlCommand = (@this, value) => new ShimSqlDataAdapter(@this);
            System.Data.Fakes.ShimDataSet.Constructor = (@this) => new System.Data.Fakes.ShimDataSet(@this)
            {
                // fake DataTableCollection of data set
                TablesGet = () => new System.Data.Fakes.ShimDataTableCollection()
                {
                    ItemGetInt32 = (S) =>
                    {
                        var dt = new DataTable("Devices");
                        dt.Columns.Add("Id");
                        dt.Columns.Add("Column2");
                        dt.Columns.Add("Column3");
                        dt.Rows.Add(It.IsAny<Guid>(), It.IsAny<string>(), It.IsAny<string>());
                        return dt;
                    }
                },
                // fake culture set for data set
                LocaleSetCultureInfo = (c) => { }
            };
            //string commandText;
            //ShimSqlCommand.AllInstances.ExecuteReader = command =>
            //{
            //    commandText = command.CommandText;
            //    return new ShimSqlDataReader();
            //};
            // Faking Fill
            System.Data.Common.Fakes.ShimDbDataAdapter.AllInstances.FillDataSetString = (a, b, c) => 0;


            //Act
            var dataService = new DataService();
            var result = dataService.GetData();

            //Assert
            Assert.IsNotNull(result); 
        }
    }

Ценю всю вашу помощь

...