gpt4 book ai didi

c# - Moq - 如何为通用基类的方法实现模拟?

转载 作者:行者123 更新时间:2023-12-03 08:26:11 24 4
gpt4 key购买 nike

我有以下接口(interface)和服务,如下实现:

public interface IParentInterface<T> where T : class
{
T GetParent(T something);
}

public interface IChildInterface : IParentInterface<string>
{
string GetChild();
}

public class MyService
{
private readonly IChildInterface _childInterface;

public MyService(IChildInterface childInterface)
{
_childInterface = childInterface;
}

public string DoWork()
{
return _childInterface.GetParent("it works");
}
}

这是我对 MyService 类的 DoWork 方法的测试:

  • 创建子界面的新模拟对象
  • 设置父接口(interface)的GetParent方法
  • 将模拟对象传递给服务构造函数
  • 执行 DoWork
  • 期望得到resp =“它确实可以与某些东西配合使用!”但它是空的
[Fact]
public void Test1()
{
var mockInterface = new Mock<IChildInterface>();
mockInterface
.As<IParentInterface<string>>()
.Setup(r => r.GetParent("something"))
.Returns("It really works with something!");

var service = new MyService(mockInterface.Object);

string resp = service.DoWork(); // expects resp = "It really works with something!" but it's null

Assert.NotNull(resp);
}

其他信息:

  • 起订量 4.16.1
  • .NET 核心 (.NET 5)
  • XUnit 2.4.1

最佳答案

你的模拟设置是说用 "something" 模拟该方法您应该更改它以匹配传入的类,例如"it works"或者更简单的是允许任何字符串使用 It.IsAny<string>() 。例如:

mockInterface
.As<IParentInterface<string>>()
.Setup(r => r.GetParent(It.IsAny<string>()))
.Returns("It really works with something!");

关于c# - Moq - 如何为通用基类的方法实现模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66568106/

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