安装了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"
/>
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
</
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上运行通过
最近在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方法中加上下面这句:
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
总结如下:
在Dotnetnuke4.5下可以对数据库存取进行单元测试,但需要一些额外准备:
1.增加app.config文件,然后从web.config中拷贝配置:
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
2.在测试用例中Setup方法中配置HostMapSeting
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)
3. 将Cache对象的程序集(默认是 DotNetNuke.Caching.FileBasedCachingProvider.dll)拷贝到在程序的运行目录下(如debug/)
提醒: 以上代码在vs.net 2005, Dotnetnuke4.5上运行通过