У меня есть функция, которую я хочу к Moq. Проблема состоит в том, что требуется 5 параметров. Платформа только содержит Action<T1,T2,T3,T4>
и дженерик Moq CallBack()
только Действие перегрузок и четыре универсальных версии. Существует ли изящное обходное решение для этого?
Это - то, что я хочу сделать:
public class Filter : IFilter
{
public int Filter(int i1, int i2, int i3, int i4, int i5){return 0;}
}
//Moq code:
var mocker = new Mock<IFilter>();
mocker.Setup(x => x.Filter(
It.IsAny<int>(),
It.IsAny<int>(),
It.IsAny<int>(),
It.IsAny<int>(),
It.IsAny<int>(),
It.IsAny<int>())
.Callback
(
(int i1, int i2, int i3, int i4, int i5) => i1 * 2
);
Moq не позволяет это, потому что нет никакого универсального Действия, которое берет 5 + параметры. Я обратился к созданию моего собственного тупика. Очевидно, было бы лучше использовать Moq со всеми его проверками и т.д.
Я знаю, что это, вероятно, нарушает ваш дизайн, но с таким количеством параметров не лучше ли передать массив параметров?
{{1} }На самом деле это довольно просто. Просто определите собственное Действие
и все готово.
public delegate void Action<T1, T2, T3, T4, T5>(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5);
Это все, что Action
, Action
, ..., Action
определены как в фреймворке. Ничего больше. Просто!