gpt4 book ai didi

c# - 最小起订量返回未被调用

转载 作者:太空宇宙 更新时间:2023-11-03 12:27:51 24 4
gpt4 key购买 nike

我有一个类(class)收到 ICacheManager通过注入(inject):

public ClientIdToClientNameResolver(IDataManager<Client> clientManager, ICacheManager cacheManager, ILogUtils logUtils)
{
this.clientManager = clientManager;
this.cacheManager = cacheManager;
this.logUtils = logUtils;
}

然后有一行代码执行Get方法:

var client = cacheManager
.Get(CacheKeys.Clients, () => clientManager.Get())
.FirstOrDefault(x => x.Id == clientId);

该方法的签名是:

TResult Get<TResult>(string key, Func<TResult> defaultValue = null)

Get的具体执行有一个 TResultList<Client>所以我像这样模拟它:

var cacheManagerMock = new Mock<ICacheManager>();
cacheManagerMock.Setup(m => m.Get(It.IsAny<string>(), It.IsAny<Func<List<Client>>>()))
.Returns(new List<Client>());

但是,在执行测试时,调用:

var client = cacheManager
.Get(CacheKeys.Clients, () => clientManager.Get())

正在返回 null .我知道这一点,因为在之前的迭代中我自己打破了那个声明。我做错了什么 Mock

最佳答案

以下 [mcve] 用于根据提供的原始示例尝试重现问题。

[TestClass]
public class UnitTest4 {
[TestMethod]
public void TestMethod1() {
//Arrange
var clients = new List<Client>(){
new Client { Id = 1 }
};

var cacheManagerMock = new Mock<ICacheManager>();
cacheManagerMock
.Setup(m => m.Get(It.IsAny<string>(), It.IsAny<Func<List<Client>>>()))
.Returns(clients);

var clientId = 1;
var clientManager = Mock.Of<IDataManager<Client>>();
var cacheManager = cacheManagerMock.Object;

//Act
var client = cacheManager
.Get(CacheKeys.Clients, () => clientManager.Get())
.FirstOrDefault(x => x.Id == clientId);

//Assert
Assert.IsNotNull(client);
}

public class Client { public int Id { get; set; } }

public interface ICacheManager {
TResult Get<TResult>(string key, Func<TResult> defaultValue = null);
}

public interface IDataManager<T> {
List<T> Get();
}

public class CacheKeys {
public const string Clients = "FakeKey";
}
}

但是测试按预期通过了。

关于c# - 最小起订量返回未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43916592/

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