【问题标题】:Why might a function Stub not get called in spite of all it's arguments matching?尽管所有参数都匹配,为什么函数 Stub 不会被调用?
【发布时间】:2014-05-15 12:59:44
【问题描述】:

我正在 Visual Studio 2012 中的 Visual Basic .NET 中编写测试。在特定的 Stub 中,我确信所有参数都匹配,但它只有在我添加 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)

_myService 是在TestInitialize 方法中定义的模拟,如下所示:

_myService= Mock.Get(Of IMyService)()

我已经检查过了,所有的值都匹配。还有另一个非常相似的测试,调用非常相似(在没有IgnoreArguments 子句的情况下完美运行),我已将其用作示例,所以我不知道为什么这不起作用。

问:很抱歉问了这么含糊的问题,但谁能想到我可能遗漏的任何东西?

我会澄清任何不合理的地方。感谢阅读。

编辑: 哎呀,事实证明(在另一双眼睛瞥了一眼代码之后)确实其中一个参数的类型是关闭的。 对于令人作呕的相似类名是可以的我不知道如何关闭它,所以让它死掉吧。感谢和抱歉抢了你的时间。

【问题讨论】:

  • 提供的细节很难说。您能否添加更多详细信息以提供Minimal, Complete, and Verifiable example
  • 我想可能是这样,抱歉。我会调查一下,虽然我需要一些时间来匿名代码,因为我不能在这里发布真正的源代码。谢谢。
  • 不,我想我所能做的就是就在这里检查的内容寻求共同建议。我已经让一些同事看代码,我们都看不到问题所在。因此,如果有人过去遇到过这个问题并且可以分享他的经验(即使该特定情况不适用于这种情况),我们将不胜感激。

标签: vb.net unit-testing visual-studio-2012 stub


【解决方案1】:

我假设您在此处模拟服务以进行测试。存根上的对象相等可能是导致它不被调用的原因。没有更多信息很难说,但这是我要看的第一件事。

【讨论】:

  • 这也是我的第一个猜测,特别是因为被测试的方法在调用此服务之前在内部做了很多工作。但问题是,在非常相似的测试中,非常相似的服务调用有一个非常相似的存根,在没有IgnoreArguments 的情况下可以完美运行,所以我不明白为什么它在这种情况下不起作用。谢谢。
  • 我也正要回答你的其他问题。对您希望存根忽略的参数使用语法 Arg.Is.Anything(这可能有助于您确定导致问题的原因)。在 MoQ 中它是 It.IsAny(),它会这样使用:MyService.CreateRequest(obj1, It.IsAny(), list1, int1, int2, bool1, bool2, bool3, string1, bool4, int3)
  • @SebastiánVansteenkiste DigitalMoss 是对的 - 这是您用来忽略特定参数的语法。以下是对熟悉此语法可能有用的相关问题的答案:stackoverflow.com/a/1946945/926713
  • 太棒了,请注意:对于 vb.net,sintax 是:Arg(Of String).Is.Anything。非常感谢! (虽然,是的,我最初的问题仍未得到解答)
猜你喜欢
  • 2019-04-29
  • 1970-01-01
  • 2014-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-12
  • 1970-01-01
相关资源
最近更新 更多