Я пишу некоторые модульные тесты для класса, а метод, который я тестирую, принимает выражение, я пытаюсь создать и выразить и передать его методу, но я получаю следующее ошибка:Создание выражения LINQ для модульного тестирования
System.ArgumentException: Static method requires null instance, non-static method requires non-null instance. Parameter name: method
[TestClass]
public class WhenFilterProvided : FindSubscriptionsForCurrentUserTestBase
{
bool filterFuncWasCalled;
private Func<UserSubscription, bool> filterFunc => (userSubscription) =>
{
filterFuncWasCalled = true;
return userSubscription.SubscriptionId == "petrol.prcies.monthly";
};
protected override Expression<Func<UserSubscription, bool>> Filter =>
Expression.Lambda<Func<UserSubscription, bool>>(Expression.Call(filterFunc.Method));
[TestMethod]
public void CallsDetailsRepository()
{
UserDetailsRepositoryMock.Verify(x => x.FindAsync("userId", CancellationToken.None), Times.Once);
}
[TestMethod]
public void FilterFuncGetsCalledToFilterSubscriptions()
{
Assert.IsTrue(filterFuncWasCalled);
}
}
Вместо использования Expression.Call ,, почему не просто вызвать FilterFunc() или filterFunc.Invoke()? –
Я думаю, что вы забыли передать параметр (userSubscription в выражении) для Expression.Call –