是否可以使用 Moq (3.0+)分配out/参数?ref
out
ref
我看过 using Callback(),但Action<>不支持 ref 参数,因为它基于泛型。我还希望It.Is在参数的输入上设置一个约束 ( ) ref,尽管我可以在回调中这样做。
Callback()
Action<>
It.Is
我知道 Rhino Mocks 支持这个功能,但是我正在做的项目已经在使用 Moq。
Moq 版本 4.8(或更高版本)对 by-ref 参数的支持有了很大改进:
public interface IGobbler { bool Gobble(ref int amount); } delegate void GobbleCallback(ref int amount); // needed for Callback delegate bool GobbleReturns(ref int amount); // needed for Returns var mock = new Mock<IGobbler>(); mock.Setup(m => m.Gobble(ref It.Ref<int>.IsAny)) // match any value passed by-ref .Callback(new GobbleCallback((ref int amount) => { if (amount > 0) { Console.WriteLine("Gobbling..."); amount -= 1; } })) .Returns(new GobbleReturns((ref int amount) => amount > 0)); int a = 5; bool gobbleSomeMore = true; while (gobbleSomeMore) { gobbleSomeMore = mock.Object.Gobble(ref a); }
相同的模式适用于out参数。
It.Ref<T>.IsAny也适用于 C# 7in参数(因为它们也是 by-ref)。
It.Ref<T>.IsAny
in