c# - 如何为“in”参数修饰符设置 Moq 回调?
问题描述
如何为带有in
参数修饰符的方法设置 Moq 设置回调?
假设你有这个:
public interface ITester
{
bool IsGood(in int value);
}
这不起作用:
var mock = new Mock<ITester>();
mock.Setup(m => m.IsGood(It.IsAny<int>()))
.Callback<int>(v => { /* whatever */ }); // ==> runtime error
mock.Object.IsGood(42);
您会收到以下异常:
System.ArgumentException : Invalid callback. Setup on method with parameters (in int) cannot invoke callback with parameters (int).
什么是正确的方法(除了in
完全删除修饰符;))?
解决方案
一种可能的解决方案是delegate
使用类似的签名(匹配输入参数)定义并在回调中使用它+It.Ref<int>.IsAny
在设置中使用:
public delegate void MyDelegate(in int value);
var d = new MyDelegate((in int a) => { Console.WriteLine($"Number {a}"); });
var mock = new Mock<ITester>();
mock.Setup(m => m.IsGood(It.Ref<int>.IsAny)).Callback(d);
mock.Object.IsGood(42); //Number 42
推荐阅读
- java - 无法在 aynctask 中未调用 Looper.prepare() 异常的线程内创建处理程序
- c++ - 线程分配的内存块是否与线程本身具有相同的亲和性,直到线程退出?
- image - 无损模式下使用 imwrite() 保存的图像不可见
- angular - Angular Mater 2 法线输入
- javascript - 仅求和唯一数组
- javascript - Javascript字符串格式化,在xpath表达式中传递methods参数
- javascript - 如何将作为另一个对象属性的函数传递给函数并在javascript中调用它?
- python - 如何将值列表提供给张量流中的占位符列表?
- sql - 列出姓名中包含“%”字符的员工姓名
- reactjs - 语义-ui反应组件didmount solidity事件订阅消息