powermockito静态和非静态方法链

时间:2016-11-09 09:53:07

标签: junit powermock powermockito

我希望静态工厂方法返回的对象的非静态方法返回特定的结果。

完成此设置后,我的测试代码将通过另一段正在测试的代码间接调用ConnectionFactory.getConn(“ABC”)。

PowerMockito.when(ConnectionFactory.getConn( “ABC”)getCurrentStatus())thenReturn(ConnectionStatus.CONNECTED);

我得到了上述声明的NPE。

  • 我在junit测试类的开头已经有了@PrepareForTest({FXAllConnectionFactory.class,ConnectionStatus.class})。

这样做的正确方法是什么?

提前致谢:)

1 个答案:

答案 0 :(得分:0)

测试设置创建流畅/链式调用时,没有点。

你看:

PowerMockito.when(ConnectionFactory.getConn("ABC").getCurrentStatus()).thenReturn(ConnectionStatus.CONNECTED);

可能是为了配置两个来电:

  1. ConnectionFactory.getConn("ABC")然后
  2. getCurrentStatus()关于第一次通话的结果
  3. 是什么让你觉得PowerMockito神奇地知道第一次调用getConn()应该返回什么

    换句话说:

    1. 首先提供一个模拟的Connection对象X;并配置你的模拟,以便getConn()返回该对象
    2. 除此之外,您必须配置X以在调用getCurrentStatus()...时在X上返回所需的值!
    3. 所以,答案实际上是:你想做的事情是不可能的。这个想法是;您指定行为,如:

       when A.foo() is called; then return some X
      

      PowerMockito内没有神奇的力量来转动

      when A.foo().bar() is called thren return Y
      

      when A.foo() is called, return X; when X.bar() is called return Y
      

      您必须逐步指定。