我正在尝试用 NSubstitute替换调用Any()
,但测试失败并显示为IDBSet<T>
ArgumentNullException
测试名称:TestMethod1 测试全名:Clientmanagement.Tests.UnitTest1.TestMethod1 测试源:c:\develop\Clientmanagement\Clientmanagement.Tests\UnitTest1.cs:第 12 行测试结果:失败测试持续时间:0:00:00.3701927
结果消息:测试方法 Clientmanagement.Tests.UnitTest1.TestMethod1 抛出异常:System.ArgumentNullException:值不能为空。参数名称:参数结果 StackTrace:在 System.Linq.Expressions.Expression.RequiresCanRead(Expression expression, String paramName) at System.Linq.Expressions.Expression.ValidateOneArgument(MethodBase method, ExpressionType nodeKind, Expression arg, ParameterInfo pi)
at System。 Linq.Expressions.Expression.ValidateArgumentTypes(MethodBase 方法,ExpressionType nodeKind,ReadOnlyCollection 1 参数)在 System.Linq.Expressions.Expression.Call(Expression 实例,MethodInfo 方法,Expression[] 参数)在 System.Linq.Queryable.Any[TSource ](可查询1& arguments)
at System.Linq.Expressions.Expression.Call(Expression instance, MethodInfo method, IEnumerable1 source, Expression
1 谓词)在 c:\develop\Clientmanagement\Clientmanagement.Tests\UnitTest1.cs:line 19 中的 Clientmanagement.Tests.UnitTest1.TestMethod1()
这是我的测试方法的样子
public void EnsureThatIdentifierIsUnique() {
IClientContext context = Substitute.For<IClientContext>();
IDbSet<Client> clients = Substitute.For<IDbSet<Client>>();
context.Clients.Returns(clients);
clients.Any(p=>p.Identifier == "Test").Returns(true); // this line throws the exception
ClientService service = new ClientService(context);
service.CreateClient("Test");
}
现在我的问题是是否可以IQueryable
用 NSubstitute 替代方法?我的测试方法设置错了吗?