如何通过Microsoft Fakes用ConcurrentDictionary(C#)填充长时间的外部依赖关系
本文关键字:长时间 填充 外部 关系 依赖 Microsoft 何通过 Fakes ConcurrentDictionary | 更新日期: 2023-09-27 18:26:31
在我需要测试的代码中发现了这样的外部依赖:
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
但我找不到连接,如何充分填充。
附言:我只是一个测试人员,不能更改现有的代码。为了做出改变,我需要说服开发人员这样做(即GConfig的额外接口),但他们必须确保这不是一个仅仅为了"简单测试"或"为测试而测试"的改变,他们真的需要这样做
好吧,所以你实际上走在了正确的轨道上。从Fakes.ShimGConfig.AllInstances.SConfigGet
开始,一旦成功,就需要填充字典。
可能是像Fakes.ShimConcurrentDictionary.AllInstances.ItemGetType
这样的东西,你可以让它返回你想要的任何GConfigIt,可能是一个存根。
您可以设置所述存根的属性,也可以对名称执行以前所做的操作。
我假设并发字典可以填充;如果没有,你仍然没有被卡住。只需填充SConfigGet即可返回SConfigGet的存根,您可以在其中输入有效值。这甚至可能比其他方式更好,因为您对实现的假设更少。