Visual studio 2008 在进行单元测试时,如何获得一个#if条件来工作?
这就是我希望能够做到的Visual studio 2008 在进行单元测试时,如何获得一个#if条件来工作?,visual-studio-2008,unit-testing,nunit,conditional,if-statement,Visual Studio 2008,Unit Testing,Nunit,Conditional,If Statement,这就是我希望能够做到的 /// <summary> /// Gets the session factory. /// </summary> /// <value>The session factory.</value> public ISessionFactory SessionFactory { get {
/// <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(_sessionFactory==null)
{
#如果(NUNIT)
_sessionFactory=fluntly.Configure()
.Database(SQLiteConfiguration.Standard
.UsingFile(DbFile)
.ShowSql())
.Mappings(m=>
m、 FluentMappings.AddFromAssemblyOf())
.ExposeConfiguration(构建架构)
.BuildSessionFactory();
#否则
_sessionFactory=fluntly.Configure()
.数据库(MsSqlConfiguration.MsSql2005
.ConnectionString(c=>c
.Server(“.\\sqlexpress”)
.数据库(“mPort”)
.TrustedConnection())
.ShowSql()
)
.Mappings(m=>m
.FluentMappings.AddFromAssemblyOf())
.BuildSessionFactory();
#恩迪夫
}
返回工厂;
}
}
如果运行单元测试,是否可以#if conditional 我不推荐这种单元测试方法。您不应该将“测试”代码放入生产文件中
您应该研究模拟对象,以从
BuildSessionFactory
方法中获得所需的功能。我不建议将此方法用于单元测试。您不应该将“测试”代码放入生产文件中
您应该研究模拟对象,以从
BuildSessionFactory
方法中获得所需的功能。我建议模拟db连接,而不是在代码中乱丢东西(即使它只在这一个地方).我建议模拟db连接,而不是在代码中乱扔if/#else(即使它只在这一个地方)。您不应该使用if部分将测试代码与生产代码分开。您希望(并且需要)测试生产代码
使数据库的类型/配置可配置可能更有意义。依赖注入是实现这一点的一种方法,而您似乎正在使用的castle框架就是为了方便地实现这一点而设计的
依赖项注入是一种将发布的代码与数据库的实际实现解耦的技术。这意味着您可以在测试期间插入一个文件或完全伪造的数据库类。您不应该使用#if部分来分隔测试代码和生产代码。您希望(并且需要)测试生产代码
使数据库的类型/配置可配置可能更有意义。依赖注入是实现这一点的一种方法,而您似乎正在使用的castle框架就是为了方便地实现这一点而设计的
依赖项注入是一种将发布的代码与数据库的实际实现解耦的技术。这意味着您可以在测试期间插入一个文件或完全伪造的数据库类。是一个编译器指令,因此您需要在运行测试时以不同的方式编译代码,而不是在“真正”运行测试时以不同的方式编译代码。可以在项目的生成设置中定义编译器标志来执行此操作
但是,我同意其他人的看法,他们认为这不是一个好办法。除了人们提到的其他问题外,当您想要在运行单元测试和运行实际应用程序之间切换时,不断地重新编译将是一件痛苦的事情
依赖项注入或模拟将更好地为您服务。是一个编译器指令,因此您需要在运行测试时以不同的方式编译代码,而不是“真正地”运行代码。可以在项目的生成设置中定义编译器标志来执行此操作
但是,我同意其他人的看法,他们认为这不是一个好办法。除了人们提到的其他问题外,当您想要在运行单元测试和运行实际应用程序之间切换时,不断地重新编译将是一件痛苦的事情
依赖注入或模拟将更好地为您服务。除了SessionFactory之外,为什么不在单元测试中创建一个FakeSessionFactory呢 在单元测试中,您传递客户机类a FakeSessionFactory实例,在应用程序中,您向他提供SessionFactory,以便他真正访问数据库
public ISessionFactory SessionFactory
{
get
{
if (_sessionFactory == null)
{
_sessionFactory = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2005
.ConnectionString(c => c
.Server(".\\sqlexpress")
.Database("mPort")
.TrustedConnection())
.ShowSql()
)
.Mappings(m => m
.FluentMappings.AddFromAssemblyOf<ForeignFormat>())
.BuildSessionFactory();
}
return _sessionFactory;
}
}
public ISessionFactory FakeSessionFactory
{
get
{
if (_sessionFactory == null)
{
_sessionFactory = Fluently.Configure()
.Database(SQLiteConfiguration.Standard
.UsingFile(DbFile)
.ShowSql())
.Mappings(m =>
m.FluentMappings.AddFromAssemblyOf<ForeignFormat>())
.ExposeConfiguration(BuildSchema)
.BuildSessionFactory();
}
return _sessionFactory;
}
}
公共ISessionFactory会话工厂
{
得到
{
if(_sessionFactory==null)
{
_sessionFactory=fluntly.Configure()
.数据库(MsSqlConfiguration.MsSql2005
.ConnectionString(c=>c
.Server(“.\\sqlexpress”)
.数据库(“mPort”)
.TrustedConnection())
.ShowSql()
)
.Mappings(m=>m
.FluentMappings.AddFromAssemblyOf())
.BuildSessionFactory();
}
返回工厂;
}
}
公共会话工厂伪造会话工厂
{
G