gpt4 book ai didi

c# - 用 NSubstitute 模拟泛型方法

转载 作者:太空狗 更新时间:2023-10-29 23:23:25 25 4
gpt4 key购买 nike

我有一个包含许多通用方法的接口(interface)。这些方法根据传入的数据类型执行操作。如何使用 NSubstitute 对此进行模拟?目前,我不得不求助于使用具体类而不是模拟类,因为我无法处理将调用该方法的所有可能类型。

public interface IInstanceSource
{
bool CanCreate<T>();
T Create<T>();
void Register<T>(Func<T> creator);
}

public static IInstanceSource GetInstanceSource()
{
var _data = new Dictionary<Type, Func<object>>();
var a = Substitute.For<IInstanceSource>();
//code below fails since T is not defined. How do I make the code below accept any type?
a.WhenForAnyArgs(x=>x.Register(Arg.Any<Func<T>>)).Do(x=> { /* todo */});
a.CanCreate<T>().Returns(x => _data[typeof (T)]);
return a;
}

谢谢。

最佳答案

NSubstitute 不支持自动设置泛型方法的多个实例。

我们通常看到的方式 IInstanceSource在测试中使用的是为被测代码的特定位配置它,所以 T会被知道。如果一个固定装置需要为几个不同的工作 T s,我们可以通过像 ConfigureInstanceSource<T>() 这样的辅助方法来简化配置这将为特定的 T 执行配置步骤.

在您的情况下,尽管您似乎希望对 IInstanceSource 的所有假实例有一个固定的行为。 ,在这种情况下,我相信您通过手动编写自己的测试替身来采用正确的方法。

关于c# - 用 NSubstitute 模拟泛型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17902491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com