当前位置: 首页 > 知识库问答 >
问题:

Java中模拟链式调用的最佳解决方案

谭泉
2023-03-14

我有以下代码:

handler = NodeHandler.getINodeHandler(localZone).getITspPlatformHandler().getITspProcessorManagementHandler();

我这样嘲笑:

mockStatic(NodeHandler.class);
INodeHandler iNodeHandler = mock(INodeHandler.class,Mockito.RETURNS_DEEP_STUBS);
when(NodeHandler.getINodeHandler(localZone)).thenReturn(iNodeHandler);
ITspProcessorManagementHandler iTspProcessorManagementHandler =mock(ITspProcessorManagementHandler.class,Mockito.RETURNS_DEEP_STUBS);
when(iNodeHandler.getITspPlatformHandler().getITspProcessorManagementHandler()).thenReturn(iTspProcessorManagementHandler);

在几行代码之后,会出现另一个链式方法调用:

ITspTrafficProcessor processor = NodeHandler.getINodeHandler(localZone, localUI).getITspPlatformHandler().getITspProcessorManagementHandler()
                .getITspProcessorHandler(procs[i]).getITspTrafficProcessorHandler(0).getAttributes();

我这样嘲笑:

when(NodeHandler.getINodeHandler(localZone,UI.CORBA)).thenReturn(iNodeHandler);
when(iNodeHandler.getITspPlatformHandler().getITspProcessorManagementHandler()(+1+).getITspProcessorHandler(anyString())
            .getITspTrafficProcessorHandler(anyInt()).getAttributes()).thenReturn(null);

所以我的问题是,我找不到比这更好的解决方案,因为问题是如果我告诉mockito将null返回给处理程序而不是iTspProcessorManagementHandler,那么我在(1)处得到一个nullpoer异常,但如果我对我的代码进行以下更改:

INodeHandler iNodeHandler = mock(INodeHandler.class,Mockito.RETURNS_MOCKS);

而不是mockito嘲笑每个方法调用,并且我的当-时返回语句不会返回我想要的内容,例如null。所以有什么建议可以做一个更好的解决方案吗????

共有1个答案

蔡修远
2023-03-14

像这样凌乱的嘲弄表明您可以改进抽象。我会考虑将该特定逻辑封装在助手接口/类中,或者将“TrainCrank”返回的预期类型注入到方法/类中。

 类似资料:
  • 问题内容: 我正在尝试编写工厂模式以在程序中创建MainMode或TestMode。我以前用来创建这些对象的代码是: 我的游戏(游戏)将根据布尔值(isMode)创建MainMode对象或TestMode对象。如您所见,我正在向我的TestMode对象(randNo())添加一个额外的值。在TestMode中使用此值,以允许用户输入自己的“随机数”,而在MainMode构造函数中,则是随机生成的。

  • 问题内容: 在Java中创建模拟对象的最佳框架是什么?为什么?每个框架的优缺点是什么? 问题答案: 我使用Mockito取得了成功。 当我尝试学习JMock和EasyMock时,我发现学习曲线有些陡峭(尽管也许就是我自己)。 我喜欢Mockito,因为它的语法简洁明了,我很快就能掌握。最小的语法旨在很好地支持常见情况,尽管几次我需要做一些更复杂的事情,但我发现我想要的东西是受支持的并且易于理解。

  • 问题内容: 想象一下,我们必须依靠ajax请求来源。当所有回调都触发时,我想执行一些操作。除了这种方法外,如何做到这一点: 我在这里不喜欢的是,在这种情况下,我无法处理响应失败(例如,我无法设置响应超时)和整体方法(我想应该有一种方法可以使用更多功能)在这里编程) 有任何想法吗? 问候! UPD: 感谢您提供链式回调的解决方案。我在这里找到了一个很好的方法。这是评论中提出的内容: 稍作调整,即可等

  • 问题内容: 我正在寻找从Java程序中执行Haskell函数的有效方法。我已经考虑过使用exec()与GHC进行交互,但是似乎应该有一个更好的方法。 问题答案: 我通常避免使用JNI类型的方法来跨运行时/语言进行链接。他们只是有太多的陷阱而没有什么好处。我发现跨流程边界工作更容易。尽管我从未在Haskell和Java上尝试过,但它们都具有支持XML RPC的库,听起来很自然地适合您的工作。因此:将

  • 问题内容: 我们希望将数据从服务器推送到客户端,但只能使用HTTP(端口80)。最佳的消息传递解决方案是什么?一种想法是彗星。是否还有其他想法或框架可以通过HTTP提供JMS。(是的,ActiveMQ也支持它,但是恕我直言。而且JXTA也支持它,但是配置很复杂。最好是简单的东西。) 问题答案: 由于许多原因,最简单的解决方案是使用基于Comet的方法(如您所述)。这意味着客户端(您要向其“推送”消

  • 问题内容: 事实证明,几乎没有人正确地关闭Java中的资源。程序员要么不使用在所有的块,或者只是把在,这也是不正确的(因为从可影子从try块)。有时他们用类似的字眼仅是正确的,而不是正确的。解决了所有这些问题,但是仍然有大量用Java 6编写的项目。 在Java 6中进行仿真的最佳方法是什么?现在我用Guava Closer ,它总比没有好,但比它更丑。另外,有一种称为贷款模式的模式,但是Java