It.*
предназначен для использования в качестве Setup
аргументов выражения и не передается в качестве параметров / переменных, поскольку по умолчанию они возвращают null .
Насколько мне известно, то, что вы запрашиваете, кажется невозможным.
Самое близкое, что я могу придумать, используя дженерики, - это создать метод расширения для действия.на auto mock, который принимает желаемое выражение для mock
public static class AutomockExtension {
public static Moq.Language.Flow.ISetup<T> Setup<T>(this Automock mock, Expression<Action<T>> expression) where T : class {
return mock.Mock<T>().Setup(expression);
}
public static Moq.Language.Flow.ISetup<T, TValue> Setup<T, TValue>(this Automock mock, Expression<Func<T, TValue>> expression) where T : class {
return mock.Mock<T>().Setup(expression);
}
}
, что на самом деле не сильно спасает вас в терминах или повторяющемся коде, поскольку вам все равно придется вызывать It.*
в выражении
using ( AutoMock mock = AutoMock.GetLoose() ) {
mock.Setup<SomeInterface>(_ =>
_.someFunction(
It.IsAny<string>(),
It.Is<string>( s => s.Equals( "Specific string" ),
It.IsAny<string>()
)
);
//...
}
Оригинальный ответ
Используйте обобщенные значения
void setup<T>(Automock mock){
mock.Mock<SomeInterface>()
.Setup(_ => _.someFunction(
It.IsAny<T>(),
It.IsAny<T>(),
It.IsAny<T>()));
}
, которые затем позволят вам вызывать настройку по мере необходимости, например
using ( AutoMock mock = AutoMock.GetLoose() ) {
setup<string>(mock);
//...
}