0

在我需要测试的代码中发现了这样的外部依赖:

var something = GConfig.SConfig[Type.ServiceType1].Names;

这部分的代码是这样的:

using System;
using System.Collections.Concurrent;
using System.Collections.Generic;

namespace Class
{
    public sealed class GConfig
    {

        public ConcurrentDictionary<Type, GConfigIt> SConfig { get; set; }

        public GConfig()
        {
            SConfig = new ConcurrentDictionary<Type, GConfigIt>();
            throw new InvalidOperationException("Error");
        }
    }

    public enum Type
    {
        ServiceType1,
        ServiceType2
    }

    public class GConfigIt
    {
        public List<string> Names { get; set; }

        public GConfigIt()
        {
            Names = new List<string>();
        }
    }
}

我需要消除这种依赖,但我自己找不到完整的解决方案,只有部分:

对于 GConfigIt(和匀场名称):Fakes.ShimGConfigIt.AllInstances.NamesGet

对于匀场 SConfig:Fakes.ShimGConfig.AllInstances.SConfigGet

但我找不到连接,如何完全填充它。

PS 我只是一名测试人员,不能更改现有代码。为了进行更改,我需要说服开发人员这样做(即 GConfig 的额外接口),但他们必须确保这不仅仅是为了“轻松测试”或“测试测试”而进行的更改,他们确实需要这样做。

4

1 回答 1

0

好的,所以你实际上是在正确的轨道上。您从 开始Fakes.ShimGConfig.AllInstances.SConfigGet,一旦成功,您需要填充字典。

可能是Fakes.ShimConcurrentDictionary.AllInstances.ItemGetType你可以返回任何你想要的 GConfigIt 的东西,可能是一个存根。

您可以设置所述存根的属性或执行您之前为名称所做的操作。

我假设可以填充并发字典;如果没有,你仍然没有被卡住。只需填充您的 SConfigGet 以返回 SConfigGet 的存根,您可以在其中输入有效值。这甚至可能比另一种方式更好,因为您对实现的假设更少。

于 2013-10-08T23:22:04.443 回答