的Mockito - 打桩,是由一个模仿对象方法返回一个对象的方法

比方说,我有一个模仿对象,我不希望任何存根它的方法,但我想它存根返回一个对象的方法。 例如,

when(mockObject.method1()).thenReturn(returnValue)

是它是如何正常完成,但我在寻找,

when(mockObject.method1().method2()).thenReturn(returnValue)

那可能吗? 我得到一个NullPointerException异常,如果我这样做。 目前,我有存根的第一个方法返回一个模仿对象,然后使用该返回模仿对象,存根第二种方法。 但是,这些临时模拟对象是没有用的,我和许多链接在一起的方法之后,这导致了很多无用的嘲笑对象。

编辑:其实,这是可能的链接的作品,但我的目标是造成NPE。 这个代码(第一行)是造成NPE:

when(graphDb.index().getNodeAutoIndexer()).thenReturn(nodeAutoIndexer); when(graphDb.index().getRelationshipAutoIndexer()).thenReturn(relAutoIndexer);

但是,此代码的工作:

IndexManager indexManager = mock(IndexManager.class); when(graphDb.index()).thenReturn(indexManager); when(indexManager.getNodeAutoIndexer()).thenReturn(nodeAutoIndexer); when(graphDb.index().getRelationshipAutoIndexer()).thenReturn(relAutoIndexer);

因此,对于链接getNodeAutoIndexer(),而它的工作对getRelationshipAutoIndexer(它返回一个对象AutoIndexer),它返回一个RelationshipAutoIndexer没有工作。 两个返回值嘲笑如下:

nodeAutoIndexer = (AutoIndexer<Node>) mock(AutoIndexer.class); relAutoIndexer = mock(RelationshipAutoIndexer.class);

所以,这可能是造成问题的原因?

--------------解决方案-------------

这是没有问题的。

让我们来看看这4行代码:

IndexManager indexManager = mock(IndexManager.class);
when(graphDb.index()).thenReturn(indexManager);
when(indexManager.getNodeAutoIndexer()).thenReturn(nodeAutoIndexer);
when(graphDb.index().getRelationshipAutoIndexer()).thenReturn(relAutoIndexer);

第一行创建一个模拟indexManager。

第二个告诉模拟graphDb返回indexManager(在第一行中创建的模拟)当索引方法被调用。

第三个Telle公司模拟indexManager(在第一行创建),当它getNodeAutoIndexer方法被调用返回nodeAutoIndexer。

而最后一行调用graphDb.index(),它返回模拟indexManager(你告诉它这样做,在线路二),并询问这indexManager(这是你第一行创建模拟)返回relAutoIndexer当其getRelationshipAutoIndexer方法被调用。

因为你告诉模拟graphDb时,其指数法叫什么返回的最后一行才起作用。 如果你以前没有做过,模拟graphDb.index()方法将返回null,你就会有一个NPE。

分类:java的 时间:2012-01-01 人气:2
分享到:

相关文章

  • 如何动态编程方式创建一个WSDL,也没有解析Java中生成的代码或存根要求? 2014-05-05

    这是我想做的事: 我有一个Java的web应用程序,我可以定义哪些执行代码(如JRuby的)服务,而且还指定的输入参数和输出参数. 所有这些信息都存储在DB中. 今天,从这些信息,我可以渲染网页呈现形式字段的输入. 如果用户提交表单我分析输入请求参数,并将它们传递到实际的JRuby代码并返回输出回一个响应的页面. 我想现在要做的就是做同样的事情,但不显示用户HTML网站,但显示出WSDL来代替. 假设该WSDL的消费者对他的最终创建一个SOAP客户端,并调用我的web服务,包括所需的输入参数,我

  • 怎么办方法链中的Java? o.m1()。M2()。M3()。M4() 2013-01-30

    我见过很多的Java代码符号,我们称之为另一种方法之后,下面就是一个例子. Toast.makeText(text).setGravity(Gravity.TOP, 0, 0).setView(layout).show(); 正如你打电话后,看到makeText的回报,我们称之为setGravity到目前为止, 我怎样才能做到这一点我自己的班? 我需要做什么特别的? --------------解决方案------------- 这种模式被称为"流利接口"(参见维基百科) 刚retur

  • 的System.out.println - 这是方法链中的Java? 2014-04-06

    我想知道关于下面的一段Java代码: "的System.out.println". 我对这个问题: "系统"是一个静态类. ".OUT"是类"系统"的方法. 这是位我略低困惑".println" - 什么类/对象是这样的方法? 此外,这个概念被称为"方法链"? 谢谢 GF --------------解决方案------------- 不,这不是方法链. 你说得对System是一个类(只

  • 方法链及在C#中的异常 2012-10-25

    如果我有类似如下的方法链: var abc = new ABC(); abc.method1() .method2() .methodThrowsException() .method3() ; 假设我已经定义method1() method2()和method3()作为 public ABC method1() { return this; } 和methodThrowsException()作为 public ABC method3() { throw new ArgumentExcepti

  • 请问在PHP中使用方法链导致的资源或内存中的任何问题? 2012-09-23

    我说的是这样的方法: $object->method()->method1('param')->method2('param'); 那些通过在函数返回对象创建. return $this; 我见过的第三方软件使用方法,但我不知道,也不会造成一点与资源或内存的问题,因为你不断地返回整个对象? --------------解决方案------------- 不必返回整个对象,而是对象的引用 -也就是说,只是它驻留的存储位置. 所以对象没有不断地在内存中拷贝时,方法是沿链调用. 默认情况下(

  • 是否值得使用方法链在C#中? 2013-09-10

    有集合初始化在C#和被允许,而不必调用构造函数来定义一个类的属性,有没有在C#中使用方法链的任何一点? 我看不到任何. 也许我失去了一些东西? 谢谢 --------------解决方案------------- LINQ? var item = sequence.Where(x => x.Age > 100) .Select(x => new { x.FirstName, x.LastName }) .OrderBy(x => x.LastName) .FirstOrDefaul

  • Java中的一个synchronized方法和synchronized块之间的区别是什么? 2013-09-13

    Java中的一个synchronized方法和synchronized块之间的区别是什么? 我一直在寻找在网上的答案,人们似乎是如此不确定这个:-( 我采取将是这两者之间没有区别,不同之处在于所述同步块可能被更局部的范围,因此锁定将是较小的时间τ 而如果锁在一个静态方法,对什么是锁定拍摄? 什么是类锁的含义? --------------解决方案------------- 一个同步的方法使用该方法接收器锁(即this非静态方法,而封装类的静态方法). Synchronized块使用表达式作为锁.

  • 自动存根在java中的单词。 使用什么样的? 2013-11-10

    我有我需要建立存根巨大的类. 为了让你想象它是消息类GWT的. 通常这是类几十个返回String的方法. 随着JMock的我能做到的存根,但我将让每一个方法结束...这不是我想看到的. 有什么会自动建立存根每种方法? 我需要这个方法返回预定义的东西,比如空字符串,但我会很乐意与任何建议. --------------解决方案------------- 在JMock的,你可以让你在乎有明确的结果,然后将方法允许任何其他方法的消息对象的允许语句不包括的方法. 例如: allowing(m).getB

  • 如何使一个无存根Web服务客户端在Java中? 2014-01-30

    我们在我们的企业使用Axis2目前. 我们的项目涉及拨打电话到多个Web服务进行故障诊断. 的问题是,非常频繁,我们在WSDL中的变化(其是非危及生命如在新的数据类型,只是得到补充服务,很少是某物丢弃)由于我们必须升级我们的应用也是如此. 基本上,我们有一个获得WSDL的新副本,通过WSDL2Java的运行它,并使用新的罐子,运行我们的单元测试和包装新的罐子和安装生产. 虽然产生存根在编译团队的能力,使我们的XMLBeans,使我们可以在我们的Java DAO层的代码很容易的工作,这个编译部署周

  • 如何在Java中的“静态反映”工作? (例如,在的Mockito和EasyMock的) 2014-04-28

    我是一个.NET的家伙 - 我主要的代码在C#. 由于C#3.0中,我们可以利用lambda表达式和表达式树使用静态反映. 例如,它可以实现GetMethodName在下面的代码段,以返回参数中传递的方法的名称: string methodName = GetMethodName( o => o.DoSomething()); Console.WriteLine(methodName); // displays "DoSomething" 现在,当我在看的Mockito样品(或E

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.682 (s). 10 q(s)