私たちのソリューションには 2 つの異なるデータベース プロバイダーがあり、どちらも別々のプロジェクトに配置されています。IDbProvider
どちらもコア プロジェクトにあるコモンを継承します。
namespace OurApp.Data
{
public interface IDbProvider
{
// truncated
}
}
namespace OurApp.Data.SqlServer
{
public class DbProvider : IDbProvider {}
}
namespace OurApp.Data.Sqlite
{
public class DbProvider : IDbProvider {}
}
データベースは機能的に同一である必要があり、SqlServer.DbProvider
.
現在、すべての RepositoryTests は基本クラスから継承されます。
public abstract class RepositoryTestsBase
{
protected IDbConnectionProvider Connection;
protected IDbProvider DbProvider;
[SetUp]
public void Setup()
{
// Need to create a new connection to the server and make sure there is no database
ConnectionStringSettings dbConnection = ConfigurationManager.ConnectionStrings["databaseConnection"];
string testDatabaseName = ConfigurationManager.AppSettings["databaseName"];
Connection = new DbConnectionProvider(dbConnection.ConnectionString, dbConnection.ProviderName);
DbProvider = new DbProvider(Connection, testDatabaseName);
}
DbProvider を変更するためだけにすべての統合テストを+ / +しなければならないのは本当に嫌です。CTRLCCTRLV
実行ごとに異なる DbProvider を注入するだけで、すべての統合テストを 2 回実行する方法はありますか? Powershell ビルドだけでなく、IDE でもこれを (明らかに) 実行できるようにしたいと考えています。
私の最初の考えは、2 つのパブリック メソッドと 1 つのプライベート メソッドを作成し、適切な db プロバイダーを注入することです。
[Test]
public void ShouldDoStuff_SQLServer() {
var dbProvider = sqlserver.DbProvider;
ShouldDoStuff(dbprovider);
}
[Test]
public void ShouldDoStuff_Sqlite() {
var dbProvider = sqlite.DbProvider;
ShouldDoStuff(dbprovider);
}
private void ShouldDoStuff (IDbProvider dbprovider){
// Assert
}