在Dotnetnuke4.5中进行NUnit

本文介绍在Dotnetnuke4.5环境下进行数据库实体类单元测试的方法,包括配置app.config文件、设置全局变量DotNetNuke.Common.Globals.HostMapPath及复制必要的缓存组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安装了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上运行通过
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值