我正在用 C# 编写内存缓存(因为没有更好的术语)。编写缓存是容易的部分,但测试它是另一个......
我对使用定时器的测试类的所有研究都是模拟定时器并将其注入到类中。有了这个,需要为每个添加到缓存的订单初始化一个新的计时器。将计时器传递给 Add 函数可以解决这个问题,但使用 OrderCache 的类不应该负责将计时器传递给它。
我需要验证
- 定时器已初始化
- 在指定的持续时间后以正确的顺序调用 Remove
订单在字典中更新,两次添加相同订单时不会创建计时器
private readonly Dictionary<int, Order> _orders; private TimeSpan _cacheDuration; public OrderCache(TimeSpan cacheDuration) { _cacheDuration = cacheDuration; _orders = new Dictionary<int, Order>(); } public void Add(Order order) { var cachedOrder = GetOrderById(order.Id); if (cachedOrder == null) { _orders.Add(order.Id, order); var timer = new Timer(_cacheDuration.TotalMilliseconds); timer.Elapsed += (sender, args) => Remove(order.Id); } else { _orders[order.Id] = order; } } public Order GetOrderById(int orderId) { return _orders.ContainsKey(orderId) ? _orders[orderId] : null; } public void Remove(int orderId) { if (_orders.ContainsKey(orderId)) { _orders.Remove(orderId); } }