c# - 是否可以使用 Rhino Mocks 来 stub 我不关心类型的通用方法?

标签 c# unit-testing tdd rhino-mocks

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

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

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

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

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

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

编辑 1

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

但是,这个问题是我必须指定类型,然后只满足该类型。被测系统可能会多次调用我正在 stub 的方法,我需要一个“包罗万象”来满足所有类型的需求。

编辑2

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

最佳答案

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

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()));
}

关于c# - 是否可以使用 Rhino Mocks 来 stub 我不关心类型的通用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28210593/

相关文章:

c# - 如何为 ashx 文件设置页面标题?

javascript - JSNlog 异常格式问题

javascript - 如何注入(inject)具有大量依赖项的 AngularJS Controller

unit-testing - 单元测试如何测试任何东西?

C#:如何 TDD 文件下载器

c# - ResolveUrl 插入额外的引号

c# - 没有证书的 SslStream

c# - 无法比较单元测试中的列表

c# - 如何在 C# 项目中构建单元测试引用

java - 你的代码覆盖率有多远?