1

我正在为以下功能编写单元测试..

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();

            }

        }
4

0 回答 0