NSubstitute可以检查带有Expression <t>的调用吗?

时间:2015-10-16 15:42:07

标签: c# unit-testing reflection mocking nsubstitute

我尝试验证对带有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>>>());

2 个答案:

答案 0 :(得分:1)

是的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>>>());
}

你得到的编译错误是什么?

答案 1 :(得分:0)

因此,在试图弄清楚为什么我的测试失败但David Tchepak工作的时候,我意识到我的原始问题不包括属性的类型也是通用的(问题已经更新)。当我对David的代码进行更改时,我开始看到与原始代码中相同的错误。

我找到了解决方案,但是:

    $("#showSelection").bind("click", function () {
    alert("in");
    //unbinding the button click
    $('#showSelection').unbind('click');
    });


   $("#kendowindow").click(function(){
     alert("in2"); 
     //want to bind the click event again but not working     
     $('#showSelection').bind('click');           
    });