我正在为以下功能编写单元测试..
public virtual FacadeClass InitNewAMSObject()
{
FacadeClass output = null;
if (ClassMapInfo != null)
{
// Override the metadata caching option
// sets property in external dll
Avectra.netForum.Common.Config.CacheMetaData = false;
if (!String.IsNullOrEmpty(ClassMapInfo.AMSClassName))
{
output = DataUtils.InstantiateFacadeObject(ClassMapInfo.AMSClassName);
}
}
else
{
throw new System.ApplicationException("Need to add the attribute");
}
return output;
}
我无法通过注释“在外部 dll 中设置属性”越过这一行。我的垫片似乎永远不会“完成”正在测试的功能。它总是抛出一个错误,它实际上是在尝试使用 dll 而不是我的 shim。看起来我只是将属性设置为 false,但 dll 使用该属性就像它的 Setter 中的方法一样。.Config 始终处于错误状态,因为它的构造函数(在 dll 中)正在尝试建立数据库连接。我希望它至少处于空状态,并且还具有 .Fakes。在类名中。我只是想跳过它,因为我不写这个 dll,它的第 3 方。
我已经研究了一天,在任何地方都找不到如何填充在引用的 dll 上设置的属性的示例。
这是我目前对其价值的测试
[TestMethod]
public void InitNewAMSObjectTEST()
{
using (ShimsContext.Create())
{
Address amsc = new Address();
bool test = true;
ShimConfig.CacheMetaDataGet = () => test;
ShimConfig.CacheMetaDataSetBoolean = value => test = value;
amsc.InitNewAMSObject();
}
}