我正在尝试模拟一个非常简单(简化)的接口(interface),它基本上是缓存服务的接口(interface):
public interface ICache
{
T Get<T>(String key);
T Set<T>(String key, T value); // return T on success or null on fail
}
我想通过以下方式使用 Moq 来模拟这个:
- 如果我使用尚未设置的 key 调用
Get
,它应该返回null
- 如果我用键“x”和值“y”调用
Set
,然后调用Get
键'x',它应该返回'y' - 如果我用值“z”覆盖键“x”,然后调用
Get
对于键“x”,它应该返回新值“z”而不是“y”。
我知道我可以创建一个实现接口(interface)并使用字典的假对象,但我想知道这是否可以使用 Moq 轻松完成。谢谢!
最佳答案
对我来说,您所描述的行为暗示了一个基础字典。但是对于简单的单元测试,我可能只调用两次 Setup
来管理这些期望。
mockCache.Setup(c => c.Get(It.Is<string>(x))).Returns(y);
//...other code
mockCache.Object.Set(x, z);
mockCache.Setup(c => c.Get(It.Is<string>(x)).Returns(z);
//...other code
关于c# - 根据其他方法输入返回一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24493123/