【发布时间】:2012-08-09 19:18:40
【问题描述】:
我在使用 moq 时遇到了一个奇怪的问题。
在一个项目中,当我尝试验证一个方法是否已被调用时,它说它没有。当我调试测试时,它清楚地调用了该方法。
这是一个简单的缓存对象,我想看看我是否向缓存中添加了一些东西。我有(除其他外)添加、包含和获取方法。
我的验证在这些方法上运行良好:
bool Contains(string key);
T Get<T>(string key);
但不是这个:
void Add(string key, object objectToCache, CacheItemPolicy policy);
我已尝试将我赋予该方法的确切值设为:
mockedCache.Verify(p => p.Add(LOCATION_CACHE_KEY, locations, policy), Times.Once());
使用它.IsAny
mockedCache.Verify(p => p.Add(It.IsAny<string>(), It.IsAny<IEnumerable<string>>(),
It.IsAny<CacheItemPolicy>()), Times.Once());
无论我尝试什么,我都会得到它被调用 0 次的响应。
我以前从未见过这种行为。谁能告诉我怎么了?
谢谢
迈克尔
更新: 正如@SergRogovtsev 建议的那样,我查看了生成的输出起订量。
我的方法不是用 IEnumerable 而是用 List 调用的
【问题讨论】:
-
Moq 倾向于在断言消息中写入 被调用的。叫什么?另外,你试过没有
Times吗? -
在您的验证中...这是一个错字吗?
It.IsAny<string>。应该是It.IsAny<string>() -
您是否考虑过您的代码错误并且没有调用 Add?
-
It.IsAny
>(),尝试将其替换为 Object may be -
您是否尝试过使用以下参数调用验证:mockedCache.Verify(p => p.Add(It.IsAny
, It.IsAny