NSubstitute 能否检查采用 Expression<T> 的调用?
Can NSubstitute check calls that take an Expression<T>?
我正在尝试验证对采用 Expression<Func<T, U>>
类型参数的方法的调用,但我无法让 NSubstitute 识别它。
public interface IFoo<T>
{
void DoThing<TProperty>(TProperty i, Expression<Func<T, TProperty>> expression);
}
// this almost works, but throws AmbiguousArgumentException
myFoo.Received(1).DoThing(Arg.Is(10), Arg.Any<Expression<Func<MyClassType, long>>>());
是的,NSubstitute 可以处理采用表达式的调用。我通过了以下测试:
public class MyClassType {
public long Property { get; set; }
}
public interface IFoo {
void DoThing(int i, Expression<Func<MyClassType, long>> expression);
}
[Test]
public void ReceivedWithAnyExpression() {
var myObj = Substitute.For<IFoo> ();
myObj.DoThing (10, x => x.Property);
myObj.Received(1).DoThing(Arg.Is(10), Arg.Any<Expression<Func<MyClassType, long>>>());
}
您遇到的编译错误是什么?
因此,在试图弄清楚为什么我的测试失败但 David Tchepak 有效时,我意识到我最初的问题没有包括 属性 的类型也是通用的这一事实(问题已更新) .当我对 David 的代码进行更改时,我开始看到与原始代码中相同的错误。
我找到了解决方案,但是:
// fails with AmbiguousArgumentException
myObj.Received(1).DoThing(Arg.Is(10), Arg.Any<Expression<Fun<MyClassType, long>>>());
// passes, but doesn't validate first parameter
myObj.Received(1).DoThing(Arg.Any<long>(), Arg.Any<Expression<Fun<MyClassType, long>>>());
// passes, _and_validates first parameter
myObj.Received(1).DoThing(10, Arg.Any<Expression<Fun<MyClassType, long>>>());
// passes, _and_validates first parameter
myObj.Received(1).DoThing(Arg.Is<long>(10), Arg.Any<Expression<Fun<MyClassType, long>>>());
我正在尝试验证对采用 Expression<Func<T, U>>
类型参数的方法的调用,但我无法让 NSubstitute 识别它。
public interface IFoo<T>
{
void DoThing<TProperty>(TProperty i, Expression<Func<T, TProperty>> expression);
}
// this almost works, but throws AmbiguousArgumentException
myFoo.Received(1).DoThing(Arg.Is(10), Arg.Any<Expression<Func<MyClassType, long>>>());
是的,NSubstitute 可以处理采用表达式的调用。我通过了以下测试:
public class MyClassType {
public long Property { get; set; }
}
public interface IFoo {
void DoThing(int i, Expression<Func<MyClassType, long>> expression);
}
[Test]
public void ReceivedWithAnyExpression() {
var myObj = Substitute.For<IFoo> ();
myObj.DoThing (10, x => x.Property);
myObj.Received(1).DoThing(Arg.Is(10), Arg.Any<Expression<Func<MyClassType, long>>>());
}
您遇到的编译错误是什么?
因此,在试图弄清楚为什么我的测试失败但 David Tchepak 有效时,我意识到我最初的问题没有包括 属性 的类型也是通用的这一事实(问题已更新) .当我对 David 的代码进行更改时,我开始看到与原始代码中相同的错误。
我找到了解决方案,但是:
// fails with AmbiguousArgumentException
myObj.Received(1).DoThing(Arg.Is(10), Arg.Any<Expression<Fun<MyClassType, long>>>());
// passes, but doesn't validate first parameter
myObj.Received(1).DoThing(Arg.Any<long>(), Arg.Any<Expression<Fun<MyClassType, long>>>());
// passes, _and_validates first parameter
myObj.Received(1).DoThing(10, Arg.Any<Expression<Fun<MyClassType, long>>>());
// passes, _and_validates first parameter
myObj.Received(1).DoThing(Arg.Is<long>(10), Arg.Any<Expression<Fun<MyClassType, long>>>());