【发布时间】:2016-01-27 23:01:02
【问题描述】:
在设置我们的新架构时,我遵循了使用NHibernate 和MsSql2008 配置的指南。
我们没有使用MsSql2008,而是使用Postgresql。这一切的配置都很好,它保存到数据库等中。
我正在尝试编写一个单元测试来测试UoW,但我无法让InMemory 配置工作。
我遵循的指南使用了以下提供者:
public class InMemoryNHibernateConfigurationProvider : NHibernateConfigurationProvider
{
public override Configuration GetDatabaseConfiguration()
{
var databaseDriver = SQLiteConfiguration.Standard.InMemory().ShowSql();
return CreateCoreDatabaseConfiguration(databaseDriver);
}
public static void InitialiseDatabase(Configuration configuration, ISession session)
{
new SchemaExport(configuration).Execute(true, true, false, session.Connection, Console.Out);
}
}
我的标准(非单元测试)配置如下所示:
public abstract class NHibernateConfigurationProvider : INHibernateConfigurationProvider
{
public abstract Configuration GetDatabaseConfiguration();
public Configuration CreateCoreDatabaseConfiguration(
IPersistenceConfigurer databaseDriver,
Action<Configuration> databaseBuilder = null)
{
var fluentConfiguration =
Fluently.Configure()
.Database(databaseDriver)
.Mappings(m => m.AutoMappings.Add(AutoMap.AssemblyOf<Organisation>(new DefaultMappingConfiguration())
//.Conventions.AddFromAssemblyOf<IdGenerationConvention>()
.UseOverridesFromAssemblyOf<OrganisationMappingOverride>()));
if (databaseBuilder != null)
{
fluentConfiguration.ExposeConfiguration(databaseBuilder);
}
return fluentConfiguration.BuildConfiguration();
}
}
public class PostgreSQLServerNHibernateConfigurationProvider : NHibernateConfigurationProvider
{
private static readonly string NpgsqlConnectionString = ConfigurationManager.ConnectionStrings["ProdDBConnection"].ConnectionString;
public override Configuration GetDatabaseConfiguration()
{
return CreateCoreDatabaseConfiguration(
PostgreSQLConfiguration.Standard.ConnectionString(NpgsqlConnectionString).
Dialect("NHibernate.Dialect.PostgreSQL82Dialect").ShowSql(),
BuildDatabase);
}
....... // Other Methods etc
}
如何编写使用PostgresqlConfiguration 而不是SqlLiteCOnfiguration 进行测试的InMemoryConfigurationProvider。 PostgresqlConfiguration 没有 InMemory 选项。
我是否实现了一个配置来创建另一个数据库并在拆卸时将其删除?或者有没有其他方法?
【问题讨论】:
-
为什么不想使用 sqlite 进行单元测试?使用 sqlite 的美妙之处在于它都在内存中。您可以在测试之间重新创建整个数据库,而开销很小。尝试使用磁盘上的“真实”数据库执行此操作肯定会使您的测试运行速度很慢,不是吗?
-
@aeliusd 这可以在 Ubuntu 机器上与 Mono 一起使用吗?抱歉,我是新手……
-
我实际上不知道,但 sqlite 似乎支持单声道:mono-project.com/docs/database-access/providers/sqlite 我会用我们的设置发布答案...
标签: postgresql unit-testing nhibernate fluent-nhibernate fluent-nhibernate-test