【发布时间】:2017-04-07 04:36:10
【问题描述】:
我正在为一个类编写一些单元测试,我正在测试的方法接受一个表达式,我正在尝试构建和表达并将其传递给方法,但我收到以下错误:
System.ArgumentException:静态方法需要空实例, 非静态方法需要非空实例。参数名称:方法
[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()?
-
我想你忘了传递 Expression.Call 的参数(表达式中的 userSubscription)
标签: c# linq-expressions