这就是我想要做的。
/// <summary>
/// Gets the session factory.
/// </summary>
/// <value>The session factory.</value>
public ISessionFactory SessionFactory
{
get
{
if (_sessionFactory == null)
{
#if(NUNIT)
_sessionFactory = Fluently.Configure()
.Database(SQLiteConfiguration.Standard
.UsingFile(DbFile)
.ShowSql())
.Mappings(m =>
m.FluentMappings.AddFromAssemblyOf<ForeignFormat>())
.ExposeConfiguration(BuildSchema)
.BuildSessionFactory();
#else
_sessionFactory = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2005
.ConnectionString(c => c
.Server(".\\sqlexpress")
.Database("mPort")
.TrustedConnection())
.ShowSql()
)
.Mappings(m => m
.FluentMappings.AddFromAssemblyOf<ForeignFormat>())
.BuildSessionFactory();
#endif
}
return _sessionFactory;
}
}如果你在运行一个单元测试,有条件的#if是可能的吗?
发布于 2009-02-24 19:43:17
#if是一个编译器指令,所以当你要运行测试时,你需要以不同的方式编译你的代码,而不是当你要真正运行它的时候。您可以在项目的生成设置中定义编译器标志来执行此操作。
但是,我同意其他每个人的观点,他们认为这不是一个好的方法。除了人们提到的其他问题之外,当你想在运行单元测试和运行真正的应用程序之间切换时,不断地重新编译将是一件痛苦的事情。
依赖注入或mocking将更好地为您服务。
发布于 2009-02-24 19:34:49
我建议模拟数据库连接,而不是在代码中散布# if /#else (即使它只在这一个地方)。
发布于 2009-02-24 19:34:00
我不推荐使用这种方法进行单元测试。你不应该把“测试”代码放到生产文件中。
您应该研究模拟对象,以便从BuildSessionFactory方法中获得所需的功能。
https://stackoverflow.com/questions/583151
复制相似问题