c# - 根据其他方法输入返回一个值

标签 c# unit-testing mocking moq

我正在尝试模拟一个非常简单(简化)的接口(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/

相关文章:

c# - 为什么 C# 编译器可以 "see"静态属性,而不是实例方法,在未引用的 DLL 中的类?

c# - 为什么这个简单的线程输出是正确的

c# - 如何解决单元测试项目 C# 中 HttpContext.Session(在 Controller 方法中)抛出的空引用异常?

swift - 如何对 Swift 定时器 Controller 进行单元测试?

Android 测试驱动开发

c# - Windows窗体应用——C#随机数猜谜游戏

c# - 使用 C# 将文件写入 "Sector 0"?

c# - C#中单元测试的生命周期是什么

testing - 如果直接访问其字段,如何模拟结构

unit-testing - 单元测试中的随机数据?