繁体   English   中英

是否可以使用 Rhino Mocks 存根我不关心类型的通用方法?

[英]Is it possible to use Rhino Mocks to stub a generic method where I don't care about the type?

我有一个带有以下签名的方法,我想存根:

async Task<T> MyMethod<T>(SomeClass, bool, string, string, string, params object[])

泛型类型 T 是我们期望方法返回的类型(从服务器返回的数据被强制转换为类型 T)。 注意,不能从传入的参数中推断出来; 每次都必须指定它。

我需要在 Rhino Mocks 中为这个方法创建一个存根,但它希望我提供泛型类型。 我希望它能够满足任何类型的呼叫。 我尝试使用<object> ,但它随后需要使用该特定类型的调用。

我可以理解为什么这会是一个问题,因为对泛型类型的调用是在编译时处理的,而不是运行时。

不过,我认为值得一问,以防万一我错过了一个技巧。

编辑 1

我应该包括现在我已经实现了一个解决方法,我已经将我的存根构建器包装在一个辅助方法中,该方法本身就是一个通用方法。

但是,这样做的问题是我必须指定类型,然后只满足该类型。 被测系统可能会多次调用我正在存根的方法,我需要一个适合所有类型的“全部捕获”。

编辑 2

我改进的解决方法是根本不使用 Rhino Mocks。 相反,我使用了一个实现接口的模拟类。 这使得实现泛型方法并返回默认值(或在构造期间设置的值)变得容易。 不过,我仍然想知道在 Rhino Mocks 中是否可行!

您可以尝试在通用方法中创建存根,然后只返回给定类型的默认实例,如下所示:

static void SetUpAStub<T>() 
        where T : new()
{
    var stub = MockRepository.GenerateStub<IMyInterface>();
    stub.Stub(i => i.MyMethod<T>(null, false, string.Empty, string.Empty, string.Empty))
        .Return(new TaskFactory().StartNew( () => new T()));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM