gpt4 book ai didi

c# - 模拟任何给定类型参数的泛型方法调用

转载 作者:IT王子 更新时间:2023-10-29 03:54:04 26 4
gpt4 key购买 nike

我有一个界面

public interface IDataProvider
{
T GetDataDocument<T>(Guid document) where T:class, new()
}

我想以某种方式模拟它,它只会返回给定类型的新实例,而不考虑确切的类型,例如:

myMock.Setup(m => m.GetDataDocument<It.IsAny<Type>()>(It.IsAny<Guid>()))
.Returns(() => new T());

(这当然行不通,因为我不能只给 moq 任何类型参数,而且我不知道必须返回哪种类型。

对此有什么想法吗?

最佳答案

与其使用模拟,也许您的案例最好使用 Stub .

public class StubDataProvider : IDataProvider
{
public T GetDataDocument<T>(Guid document) where T : class, new()
{
return new T();
}
}

如果您确实需要模拟(这样您就可以验证是否调用了 GetDataDocument)。与其尝试使用 Mocking 框架,有时直接创建 Mock 类更容易。

public class MockDataProvider : IDataProvider
{
private readonly Action _action;

public MockDataProvider(Action action)
{
_action = action;
}

public T GetDataDocument<T>(Guid document) where T : class, new()
{
_action();
return new T();
}
}

比起你的测试:

bool wasCalled = false;
IDataProvider dataProvider = new MockDataProvider(() => { wasCalled = true; });
var aTable = dataProvider.GetDataDocument<ATable>(new Guid());
Debug.Assert(wasCalled);

关于c# - 模拟任何给定类型参数的泛型方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5311023/

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