Vb.net 为什么一个函数存根即使在所有情况下也不会被调用';s参数匹配?

Vb.net 为什么一个函数存根即使在所有情况下也不会被调用';s参数匹配?,vb.net,unit-testing,visual-studio-2012,stub,Vb.net,Unit Testing,Visual Studio 2012,Stub,我正在Visual Studio 2012中用Visual Basic.NET编写测试。在一个特定的存根中,我确信所有的参数都匹配,但它只有在我向其中添加IgnoreArguments时才会被执行,但是由于我需要为同一个方法创建其他类似的存根,所以这对于生产来说是不可接受的 我不能发布代码示例(当然,我可以,但它需要非常大才能有用)。但如果我告诉你这是一个以下形式的请求就足够了: Dim request As IMyRequest = MyService.CreateRequest(obj1,

我正在Visual Studio 2012中用Visual Basic.NET编写测试。在一个特定的存根中,我确信所有的参数都匹配,但它只有在我向其中添加
IgnoreArguments
时才会被执行,但是由于我需要为同一个方法创建其他类似的存根,所以这对于生产来说是不可接受的

我不能发布代码示例(当然,我可以,但它需要非常大才能有用)。但如果我告诉你这是一个以下形式的请求就足够了:

Dim request As IMyRequest = MyService.CreateRequest(obj1, obj2, list1, 
    int1, int2, bool1, bool2, bool3, string1, bool4, int3)
我的存根看起来像:

_myService.Stub(Function(x) x.CreateRequest(obj1, obj2, list1, 
    int1, int2, bool1, bool2, bool3, string1, 
    bool4, int3)).IgnoreArguments.Return(myRequest)
\u myService
是在
TestInitialize
方法中定义的模拟,如下所示:

_myService= Mock.Get(Of IMyService)()
我已经检查过了,所有的值都匹配。还有另一个非常类似的测试,它使用了一个非常类似的调用(在没有
IgnoreArguments
子句的情况下工作得非常好),我将其用作示例,因此我不知道为什么这不起作用

Q:我很抱歉问了这么一个模糊的问题,但有人能想到我可能遗漏了什么要检查的吗

我会澄清任何不合情理的事情。谢谢你的阅读


EDIT:whelp,事实证明(在又一双眼睛扫了一眼代码之后),其中一个参数的类型确实是关闭的。是啊,类名非常相似,我不知道如何关闭它,所以就让它消失吧。感谢并抱歉占用了您的时间。

我想您是在嘲笑这里的服务进行测试。存根上的对象相等可能是导致它无法被调用的原因。如果没有更多的信息,这很难说,但这是我要看的第一件事

提供的细节很难说。你能提供更多的细节吗?我想可能是这样的,对不起。我会调查的,虽然我需要一段时间来匿名代码,因为我不能在这里发布真正的源代码。谢谢。不,我想我所能做的就是就在这里检查什么征求一般意见。我已经要求一些同事查看代码,但我们都看不出问题所在。因此,如果有人在过去遇到过这个问题,并且可以分享他的经验(即使这个特定的案例不适用于这个场景),我们将非常感激。这也是我的第一个猜测,特别是因为正在测试的方法在调用此服务之前在内部做了大量工作。但问题是,在一个非常相似的测试中,有一个非常相似的存根,用于一个非常相似的方法上的一个非常相似的服务调用,它在没有
IgnoreArguments
的情况下完美地工作,所以我不明白为什么它在这种情况下不工作。谢谢。我正要回答你的另一个问题。对于希望存根忽略的参数,请使用语法Arg.Is.Anything(这可能有助于确定是哪个参数导致了问题)。在MoQ中,它就是it.IsAny(),它的用法是:MyService.CreateRequest(obj1,it.IsAny(),list1,int1,int2,bool1,bool2,bool3,string1,bool4,int3)@SebastiánVansteenkiste DigitalMoss是正确的-这是用于忽略特定参数的语法。下面是一个相关问题的答案,可能有助于了解这种语法:太棒了,只是一个注意:对于vb.net,sintax是:
Arg(字符串的).is.Anything
。非常感谢!(虽然,是的,我最初的问题仍然没有得到回答)