【问题标题】:Integration Testing Data Access Code For SqlSql的集成测试数据访问代码
【发布时间】:2017-05-08 14:28:56
【问题描述】:

我有一个名为 Database 的类,它实现了以下接口;

 public interface IDatabase
{
    int ExecuteNonQuery(string command, CommandType commandType, Dictionary<string, object> parameters);
}

顾名思义,ExecuteNonQuery 函数以与提供者无关的方式执行非查询数据库命令。

我需要为这个类编写集成测试,到目前为止我已经为Sql Server Compact Edition编写了一个集成测试,它通过了测试。

这里是集成测试代码;

public class DatabaseIntegrationTests
{
    private readonly string CurrentDir;
    private readonly string SqlCeDbPath;

    public DatabaseIntegrationTests()
    {
        CurrentDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
        SqlCeDbPath = CurrentDir + @"\TestDb.sdf";
    }

    [Fact]
    public void ExecuteNonQuery_SqlServerCE_Should_Execute()
    {
        var dbConfFunc = this.InitializeSqlServerCeInstance();
        Database database = new Database(dbConfFunc);
        database.ExecuteNonQuery("CREATE TABLE Test([ID] [bigint] IDENTITY(1,1) NOT NULL,[Message] [nvarchar](255) NULL)",
            CommandType.Text, null);

        var parameters = new Dictionary<string, object>();
        parameters.Add("@message", "Hello World!");
        database.ExecuteNonQuery("INSERT INTO Test(Message) VALUES(@message)",
            CommandType.Text, parameters);

        CleanUpSqlServerCe();
    }
    private void CleanUpSqlServerCe()
    {
        if (File.Exists(SqlCeDbPath))
            File.Delete(SqlCeDbPath);
    }
    private Func<DbConnectionConfiguration> InitializeSqlServerCeInstance()
    {
        string connectionString = "Data Source=" + CurrentDir + @"\ASTest.sdf;Persist Security Info=False";

        CleanUpSqlServerCe();

        SqlCeEngine engine = new SqlCeEngine(connectionString);
        engine.CreateDatabase();

        return () =>
       {
           return new DbConnectionConfiguration()
           {
               DataProvider = "System.Data.SqlServerCe.4.0",
               ConnectionString = connectionString
           };
       };
    }
}

我的问题是,如何为这个类为 MySql 和 Sql Server 数据库提供者编写集成测试? 为这个类编写集成测试以测试 MySql 和 Sql Server 数据库的最实用方法是什么?

【问题讨论】:

  • 识别最有可能在测试之间更改的代码,并创建一个抽象的基础测试类,以便为每个测试进行必要的更改
  • 问问自己您要验证什么行为。您编写了一个包装类,因此您可以对依赖于数据库的其他代码进行单元测试。您不需要显式测试包装器。您应该对使用数据库抽象的方法进行集成测试,这将彻底验证您的包装器。
  • @DanielMann 是的。它是一个数据访问层的包装类,应该适用于 mysql、sql server 和 sql server 精简版。我不应该为它写一个集成测试吗?

标签: c# .net testing integration-testing


【解决方案1】:

为了测试 MySql ,我使用了https://github.com/stumpdk/MySql.Server

编辑:请注意,它不支持程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-23
    • 2013-01-11
    • 2017-09-17
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    相关资源
    最近更新 更多