使用Generics获取随机数据

Ada*_*lor 2 c# generics unit-testing

我们的一个单元测试是使用随机数据填充业务对象中的属性.

这些属性具有不同的内在类型,因此我们希望使用泛型的功能来返回您传入的类型的数据.有些内容如下:

public static T GetData<T>()
Run Code Online (Sandbox Code Playgroud)

你会如何接近这个?低级别界面会起作用吗?(IConvertible)

Jon*_*eet 16

您可以保留"易于使用"的GetData接口,但内部有一个Dictionary <Type,object>,其中每个值都是相关类型的Func <T>.然后GetData将具有如下实现:

public static T GetData<T>()
{
    object factory;
    if (!factories.TryGet(typeof(T), out factory))
    {
         throw new ArgumentException("No factory for type " + typeof(T).Name);
    }
    Func<T> factoryFunc = (Func<T>) factory;
    return factoryFunc();
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以在静态初始化程序中设置工厂字典,并为要创建的每种类型的随机数据设置一个委托.在某些情况下,您可以使用简单的lambda表达式(例如,对于整数),在某些情况下,委托可以指向执行更多工作的方法(例如,对于字符串).

顺便说一下,您可能希望将我的StaticRandom类用于线程安全的RNG.