在Dotnetnuke4.5中进行NUnit

安装了Resharper后,NUnit用的是顺风顺水,在vs2005中可以直接运行和调试 测试用例,那是相当的爽。
最近在DNN4.5上开发,写了一些数据库实体类的测试用例,发现竟然不能通过,总是报什么CachingProvider发生 TypeInitializationException 错误。初步判断是DNN的Cache机制,将实体类的反射信息存在Cache中,由于单元测试环境没有网站支撑,导致Cache机制运行失败。
虽然找到原因,可是解决的过程时漫长的。开始怀疑config配置错误(在Nunit的项目中叫app.config,会自动生成对应的dll.config),于是将web.config中的全部搬过来,仍然报错。经过在DNN代码中钻来钻去,终于发现DNN的Cache机制依赖了一个全局变量: DotNetNuke.Common.Globals.HostMapPath,dotnetnuke将Cache信息放到了这个目录下的Cache子目录中,在NUnit运行环境下该变量为空,所以造成错误。
找到错误根源,解决就简单了,抱着一个忐忑的心,在测试用例的SetUp方法中加上下面这句:
     DotNetNuke.Common.Globals.HostMapPath = System.IO.Directory.GetCurrentDirectory() + @"/";       
运行用例,哈哈,通过!悬着的心终于放下。

总结如下:
在Dotnetnuke4.5下可以对数据库存取进行单元测试,但需要一些额外准备:
1.增加app.config文件,然后从web.config中拷贝配置:
< configSections >
    
< sectionGroup  name ="dotnetnuke" >
      
<!--  the requirePermission attribute will cause a syntax warning - please ignore - it is required for Medium Trust support -->
      
< section  name ="data"  requirePermission ="false"  type ="DotNetNuke.Framework.Providers.ProviderConfigurationHandler, DotNetNuke" />
         
< section  name ="caching"  requirePermission ="false"  type ="DotNetNuke.Framework.Providers.ProviderConfigurationHandler, DotNetNuke" />
    
</ sectionGroup >
  
</ configSections >
  
< connectionStrings >
    
< add  name ="SiteSqlServer"  connectionString ="Server=(local);Database=dotnetnuke;uid=sa;pwd=1234"
     providerName
="System.Data.SqlClient"   />
  
</ connectionStrings >
  
< appSettings >
    
<!--  Connection String for SQL Server 2000/2005 - kept for backwards compatability - legacy modules -->
    
< add  key ="SiteSqlServer"  value ="Server=(local);Database=dotnetnuke;uid=sa;pwd=1234" />

  
</ appSettings >
  
  
< dotnetnuke >
    
< data  defaultProvider ="SqlDataProvider" >
      
< providers >
        
< clear />
        
< add  name ="SqlDataProvider"  type ="DotNetNuke.Data.SqlDataProvider, DotNetNuke.SqlDataProvider"  connectionStringName ="SiteSqlServer"  upgradeConnectionString =""  providerPath ="~ProvidersDataProvidersSqlDataProvider"  objectQualifier =""  databaseOwner ="dbo" />
      
</ providers >
    
</ data >     
    
< caching  defaultProvider ="FileBasedCachingProvider" >
      
< providers >
        
< clear />
        
< add  name ="FileBasedCachingProvider"  type ="DotNetNuke.Services.Cache.FileBasedCachingProvider.FBCachingProvider, DotNetNuke.Caching.FileBasedCachingProvider"  providerPath ="~ProvidersCachingProvidersFileBasedCachingProvider" />
        
< add  name ="BroadcastPollingCachingProvider"  type ="DotNetNuke.Services.Cache.BroadcastPollingCachingProvider.BPCachingProvider, DotNetNuke.Caching.BroadcastPollingCachingProvider"  providerPath ="~ProvidersCachingProvidersBroadcastPollingCachingProvider" />
      
</ providers >
    
</ caching >
  
</ dotnetnuke >


2.在测试用例中Setup方法中配置HostMapSeting
[SetUp]
public   void  Setup()
{
            DotNetNuke.Common.Globals.HostMapPath 
= System.IO.Directory.GetCurrentDirectory() + @"";
}

3. 将Cache对象的程序集(默认是 DotNetNuke.Caching.FileBasedCachingProvider.dll)拷贝到在程序的运行目录下(如debug/)

提醒: 以上代码在vs.net 2005, Dotnetnuke4.5上运行通过
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值