2010-11-19 49 views
3

可以说我有这个使行动被调用在Silverlight单元测试与MOQ

_articlesService.SaveAsync(Model, AddressOf OnSaveCompleted) 

的OnSaveCompleteMethod做了几件事情,很明显。它的一个

Protected Overridable Sub OnSaveCompleted(ByVal asyncValidationResult As AsyncValidationResult) 

在我的单元测试。我需要运行一个模拟的SaveAsync,并且无论如何都调用OnSaveCompleted,因为该方法发出我需要知道的事件已发送。

现在,代码只是走过该方法,因此它从未执行过。

需要帮助解决这个问题,因为我现在被卡住了。

+0

不可能与VB.net限制最小起订量的原因缺乏相同的支持c#的匿名方法。 – Einarsson 2010-11-22 12:11:49

回答

1

如果我理解你的背景下右:

  • 你必须在其使用ArticlesService
  • 您ArticlesService(一个合作类)的测试类是负责发送某些事件
  • 要验证被测试的班级行为正确
  • 你想通过检查事件来做到这一点。

如果是这样,你可能会让你的班级负责超过它的需要。您只需验证ArticlesService是否被要求保存同步。您不必担心ArticlesService会发生什么事情。

想想这样。你是一个被测班。你有太多的工作要做,所以你已经请了其他人来帮助你。你有两个选择。你可以追逐他们,担心他们是否做得对,或者你可以信任他们。

您可以编写一个单独的测试,它提供ArticlesService工作方式的一些示例,它将检查ArticlesService是否正确地执行作业。您的CUT的责任是有效地委托该工作。

如果你确实需要提高,这样你的CUT可以响应的事件,这是其行为的不同方面,你可以用起订量的“提高”的方法,在“事件”记录做,在这里:

http://code.google.com/p/moq/wiki/QuickStart

编辑:您还可以使用“回调”,记录了同一链路上,做的东西与ARGS被传递给你,包括OnSaveCompleted。不知道它是否会有所帮助;没有代码和失败的测试,看看你在做什么很棘手。无论如何,祝你好运!

0

关闭,但不完全如此。

我们实际上并没有在ArticleService中发送一个事件。

SaveAsync方法需要保存文章,并且保存完成后调用一个方法。

问题是“OnSaveCompleted” - 方法没有被调用。(该方法存在于View Model Base类中,所以服务不发送事件,视图模型是。)。

但是我们有我们自己的WCF服务代理实现,所以这可能是我们搞的,因为我们不使用生成的代码。

认为我们将不得不为了解决这个问题而重新修复我们的服务基础设施。

所以这是一个特殊情况,只是想抛出问题以防万一。 :)

无论如何感谢您的答案。

+0

啊,我明白了。编辑我的答案与另一个可能会有所帮助的建议... – Lunivore 2010-11-22 07:30:51

+0

回调肯定是要走的路,认为我们只需要修改inftrastructure一点点就可以使这个测试良好的方式。感谢您的帮助:)将标记为答案。 – Einarsson 2010-11-22 08:56:03

+0

另外,有趣的事情。现在发现问题,模拟不会工作属性。这是因为我的雇主强迫我们使用VB.net,即使我们已经把他们数千次的bug都告诉了C#在每一点上都更好。那么,VB.NET不适用于MOQ。所以再次,狗屎VB是问题。 :( – Einarsson 2010-11-22 09:26:20