我发现了很多关于错误消息的问题,但找不到与我的具体情况相符的问题。
在缓存实现中,我有一个带有此签名的方法:
public bool TryGet(TKey key, out TValue returnVal, Func<TKey, TValue> externalFunc = null)
我有一个继承自TKey的类:CompositeKey和TValue:字符串。
我正在尝试像这样对它进行单元测试:
_cacheMock
.Setup(x => x.TryGet(It.IsAny<CompositeKey>(), out It.Ref<string>.IsAny, It.IsAny<Func<CompositeKey, string>>()))
.Returns((CompositeKey key, out string s, Func<CompositeKey, string> fetchOne) => { s = ""; return true; });
.Returns
行出现编译错误:
“无法将lambda表达式转换为'bool'类型,因为它不是 委托类型”
如果删除“ out”修饰符,它将编译正常-但当然与调用的签名不匹配,并且我无法获得out值。
是否可以在不修改TryGet()方法本身的情况下修复语句的Returns()部分?
答案 0 :(得分:1)
这可能对您有用:
//define the callback delegate
delegate void TryGetCallback(CompositeKey key, out string str, Func<CompositeKey, string> func);
mock.Setup(x => x.TryGet(
It.IsAny<CompositeKey>(),
out It.Ref<string>.IsAny,
It.IsAny<Func<CompositeKey, string>>()))
.Callback(new TryGetCallback((CompositeKey key, out string str, Func<CompositeKey, string> func) =>
{
str = "foo bar";
}))
.Returns(true);
通过这样的设置,您可以存档所需的内容
string actualValue;
bool result = mock.Object.TryGet(new CompositeKey(), out actualValue)
//actualValue = "foo bar", result = true