我们的解决方案有两个不同的数据库提供者,它们都位于不同的项目中。他们都继承了位于我们核心项目中的共同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);
}
我真的讨厌不得不CTRL +ç/CTRL +V我所有的集成测试只改变DbProvider。
是否有一种方法可以运行所有集成测试两次,而只需为每次运行注入不同的DbProvider?我希望能够(显然)在Powershell构建中执行此操作,但也可以在IDE中执行此操作。
我最初的想法是创建两个公有方法和一个私有方法,注入适当的数据库提供程序。
[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
}
哪个测试框架,您使用的? –
我已更新我的问题。我们正在使用nunit。 –
有多种方式。但是如果不知道某些细节(测试框架,现有代码等),就不可能提出具体的方法。 –