如何为 `in` 参数修饰符设置 Moq 回调?
How to setup a Moq Callback for an `in` parameter modifier?
如何为带有 in
parameter modifier 的方法设置最小起订量设置回调?
假设你有这个:
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
如何为带有 in
parameter modifier 的方法设置最小起订量设置回调?
假设你有这个:
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