首页 > 解决方案 > 如何模拟(没有任何模拟框架)其类型参数的特定值的通用函数

问题描述

我需要创建给定数据库的模拟实例,其接口是通用的func<T>(param1, param2,...)

问题是,我想对某些值和某个 T 值给出一个具体的答案。

我怎样才能做到这一点?(我需要一个真正的常规类来实现该接口,而不是 NSubstitute\Mock 类

我尝试创建两个函数,一个具有通用签名,一个具有具体签名,但编译器似乎无法识别它是同一接口函数的实现)

public interface IManager
{
    T func<T>(string parameter);
}

标签: c#genericsmocking

解决方案


假设 Foo 是您的“T 的确定值”。只需将一个实例实例化为实现您的接口的具体类。

IManager manager = new ConcreteManager()
Foo foo = manager.func<Foo>("input value");

在哪里

public class ConcreteManager : IManager
{
    public T func<T>(string parameter)
    {
        // Implementation here

    }
}

请记住,实现通常是适用于任何类型 T 的代码。

请参阅 List 类示例:https ://referencesource.microsoft.com/#mscorlib/system/collections/generic/list.cs

您真的不想必须执行以下操作(尽管我确信您将能够找到这样做的代码)。

    public T func<T>(string parameter)
    {
         Type listType = typeof(T);
         if(listType == typeof(int))
         {
             ...
         } 
         ...
    }

推荐阅读