2016-11-09 183 views
1

我想要静态工厂方法返回的对象的非静态方法返回特定的结果。powermockito静态和非静态方法链

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

我得到了上述声明的NPE。

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

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

感谢提前:)

回答

0

创造一个流畅/链接调用你测试设置没有点。

你看:

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

很可能意味着配置电话:

  1. ConnectionFactory.getConn("ABC")并就第一次调用的结果,那么
  2. getCurrentStatus()

什么使你认为PowerMockito神奇地知道应该由第一次调用getConn()返回什么?

换句话说:

  1. 首先提供一个嘲笑Connection对象X;并配置您的模拟,以便getConn()返回该对象
  2. 除此之外,您必须配置X以便在X上调用getCurrentStatus()时返回所需的值!

所以,答案其实是:你想做的事是不可能的。这个想法是;您指定的行为,如:

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 

您必须指定一步一步来。

+0

ConnectionFactory.getConn(“ABC”)已被设置并将返回correctType的对象。 – ali90

+0

然后,您可能会显示** all **您的代码。如果你的代码会做你期望的事情,那么你不会在这里,对吗? – GhostCat