我有一个名为数据库的类,它实现了以下接口;
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 数据库进行测试的最实用方法是什么?
为了测试MySql,我使用了 https://github.com/stumpdk/MySql.Server
编辑 :请注意,它不支持程序。