是否可以使用Moq(3.0+)分配out/ ref参数?
out
ref
我看过使用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#7 in参数(因为它们也是by-ref)。
It.Ref<T>.IsAny
in